On 2009-06-07 10:47:47 +0200, Christian Kamm
<[email protected]> said:
bearophile wrote:
The following code even crashes LDC during the compilation, I'll ask in
the LDC channel:<
The good ChristianK has already added it:
http://www.dsource.org/projects/ldc/ticket/320
And thankfully Frits van Bommel has already fixed it: it consumes about 40kb
of heap memory at runtime now.
This seems to be because we don't use the _d_arrayappend functions at all
but emit a _d_arraysetlength instead. What's the memory growing behavior of
that function? Should this be considered a bug?
I would say that setlength should not allocate extra space, because one
should trust that the user knows his needs, whereas if the array grows
while appending then it is reasonable to add extra space because the
user is probably appending without really knowing/caring about array
resizes.
So it is reasonable (and probably good) to try to second guess him, and
add extra space.
This way repeatedly appending to that array has a good performance.
Thus yes I would say that it should be considered a bug (that will
degrade repeated appending performance).
The solution is to use a better newCapacity function, instead of the
flawed one.
Fawzi