Array length & allocation question

Sean Kelly sean at f4.ca
Mon Jun 12 16:01:42 PDT 2006


Derek Parnell wrote:
> On Tue, 13 Jun 2006 05:27:44 +1000, Bruno Medeiros 
> <brunodomedeirosATgmail at SPAM.com> wrote:
> 
>> Derek Parnell wrote:
>>> On Mon, 12 Jun 2006 09:11:04 +1000, Bruno Medeiros 
>>> <brunodomedeirosATgmail at SPAM.com> wrote:
>>>
>>>> Hum, and happens when one shortens the length of the array? The 
>>>> Memory Manager "back" buffer size remains the same?
>>>  Yes. However there is a bug (oops - an issue) in which if the length 
>>> is set to zero the RAM is released back to the the system.
>>>  --Derek Parnell
>>> Melbourne, Australia
>>
>> That makes perfect sense, why would it be a bug?
> 
> Agreed, it is not a bug in the sense that it is contrary to 
> specifications because this behaviour isn't specified. However it does 
> prevent a coder from distinguishing between an empty array from a null 
> array. An Empty one is an array that (no longer) has any elements and a 
> null array is one that doesn't have any RAM to reference.
> 
> I sugest that Walter either document this functionality or fix it.
> 
> "When an array length is reduced the RAM it owns is not released and can 
> be reused when the array subsequently is expanded (, unless the length 
> is set to zero in which case the RAM is released). "
> 
> Setting the length to zero is a convenient way to reserved RAM for an 
> array.
> 
> Also consider this ...
> 
>     foo("");
> 
> Now how can 'foo' be written to detect a coder's error of passing it an 
> uninitialized array.
> 
>     char[] x;
>     foo(x);

Perhaps D arrays simply need a reserve property?


Sean



More information about the Digitalmars-d-learn mailing list