dynamic array memory allocation

Traveler Hauptman none at none.com
Wed May 16 13:05:29 PDT 2007


Walter Bright wrote:
> Greg Weber wrote:
>> I find myself wondering what actually happens when I create a dynamic
>> array and concatenate items onto it.  I think I read in a post that
>> memory will be over-allocated at times to avoid re-allocating.
>>
>> I think it would help out a lot to have an ability to specify
>> over-allocation.  Something like
>> uint a = [];
>> a.length = 3:10
>>
>> Where the array length is 3, but you are guaranteed to have memory
>> allocation for 10, so you can be guaranteed that concatenation up to
>> ten will not need to allocate memory.  This could help in the
>> situation where there is concatenation in a loop, and the programmer
>> over-sizes the array before the loop and re-sizes after the loop.
> 
> a.length = 10;
> a = a[0 .. 3];

I can sympathize with greg, I often use arrays as an intermediate memory
allocator (when writing code that can't be garbage collected). But it
would require dynamic arrays have a different shape; you would have to
track the buffer size in addition to the number of elements... (or you
check mallocs boundary tags if you want to be non-portable)

It would be nice to be able to set minimum allocation chunk size on a
type-by-type basis; especially for small types. Or is that considered a
compiler optimization?



More information about the Digitalmars-d mailing list