https://issues.dlang.org/show_bug.cgi?id=17881
--- Comment #6 from Steven Schveighoffer <schvei...@yahoo.com> --- (In reply to Rainer Schuetze from comment #5) > A slightly simpler API could be to add allocating N same-sized chunks from > the GC that returns them in a free-list-like chain. I think an array is best, since the data already is an array, and a free-list requires building a linked list before-hand. > I agree with Andrei that we should not complicate the GC interface for every > possible allocation pattern a user might want to optimize for, though. Hm... I'm trying to find the most generic interface for this. It's not necessarily limited to AA, as allocating a bunch of blocks in a loop isn't an uncommon thing. If there was a way to "re-flavor" the blocks from one giant block into individual ones, then we could do this outside the GC. > If you call GC.reserve(20_000_000*(Key.sizeof+Value.sizeof)) before > inserting elements, there should be no collection while filling the AA. Limiting the collection in the example I posted shaves off about 300-400msec, but it still is 1.5 seconds vs. 0.1 for the local array version. > If we add thread local free-lists to the GC, the overhead of allocating > these from the GC instead of caching them in the AA would be rather small. Agreed, I think keeping the lists inside the GC is the most useful, and does not expose any implementation details to the user. --