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.

Reply via email to