On Thursday, 28 April 2016 at 12:56:24 UTC, Jay Norwood wrote:
I timed some code recently and found that .reserve made almost
no improvement when appending. It appears that the actual
change to the length by the append had a very high overhead of
something over 200 instructions executed, regardless if the
.reserve was done. This was a simple append to an integer
array.
The only way I found to avoid this was to set the length
outside the loop and update the array values by index. That
was on the order of 10x faster.
Have you looked at the way .reserve is used in Appender ? In this
struct reserving has a true impact. Exactly the opposite of what
you've observed: if nothing is reserved in an appender then the
Appender is not worth (unfortunately I have a benchmark for this
but on another machine :/).
Out of an appender I believe .reserve can be used to force page
creation if you know that several pages will be allocated.
For example for an ubyte[] when .length goes from 16 to 17 the
memory block *really* allocated by realloc goes from 16 to 4096.