new Type[count] takes too much?
Namespace
rswhite4 at googlemail.com
Thu Oct 31 03:16:35 PDT 2013
On Thursday, 31 October 2013 at 10:12:10 UTC, Jonathan M Davis
wrote:
> On Thursday, October 31, 2013 10:59:48 Namespace wrote:
>> On Thursday, 31 October 2013 at 09:48:23 UTC, safety0ff wrote:
>> > On Thursday, 31 October 2013 at 09:15:53 UTC, Namespace
>> > wrote:
>> >> I'm sure we had already this conversation but I don't find
>> >> the
>> >> thread.
>> >>
>> >> T[] buffer = new T[N]; assumes more space than stated (in
>> >> average 2010 elements more. See:
>> >> http://dpaste.dzfl.pl/af92ad22c). It behaves exactly like
>> >> reserve and that is IMO wrong. If I reserve memory with
>> >> buffer.reserve(N), I want to have at least N elements. That
>> >> behaviour is correct. But if I use new T[N] I mostly want
>> >> exactly N elements and no extra space.
>> >>
>> >> Thoughts?
>> >
>> > To me it looks like it is derived directly from the way the
>> > GC
>> > allocates chunks:
>> > Next power of two if less than 4096 otherwise some multiple
>> > of
>> > 4096.
>> >
>> > Unless you modify the GC, this behaviour is present whether
>> > you
>> > can see it or not (http://dpaste.dzfl.pl/5481ffc2 .)
>>
>> Maybe (and hopefully) I'm wrong, but it seems that the static
>> array is on the heap?
>
> T[] buffer = new T[N];
>
> is a dynamic array. Now, in the code in your dpaste link, you
> have a static
> array which is in a struct which is on the heap, so that's
> different, but now
> you're dealing with the amount of memory that gets allocated on
> the heap for
> the struct, and as the GC is going to allocate in multiples of
> 2, more than
> the size of the struct is going to be allocated. It might be
> that some of the
> memory beyond the end of the struct might actually be used for
> another object
> rather than the struct using the memory block by itself (I'm
> not sure what the
> GC does in that regard), but it's definitely going to allocate
> in multiples of
> 2, so if the GC has to go up another multiple of 2 to make the
> struct fit,
> it'll go up another multiple of 2.
>
> - Jonathan M Davis
Hm, seems not very performant for a *system* language. But fine,
thanks for your explanation. :)
More information about the Digitalmars-d-learn
mailing list