Fast GC allocation of many small objects

Steven Schveighoffer schveiguy at yahoo.com
Mon Apr 2 18:22:43 UTC 2018


On 3/30/18 4:31 PM, Per Nordlöw wrote:
> I'm working on a graph database with tens of millions of small nodes 
> containing typically around 8-64 bytes of member data. Is there a faster 
> way of allocating many small class objects such as
> 
> class Node
> {
>      // abstract members
> }
> 
> class StrNode : Node
> {
>      string value;
> }
> 
> // more Node-types...
> 
> other than
> 
> const nodeCount = 10_000_000;
> foreach (0 .. n)
> {
>      auto node = new Node(someData);
>      // connect node...
> }
> 

You may be interested in this proposal, which was inspired by trying to 
implement a reserve feature for AAs (requires a similar mechanism).

https://issues.dlang.org/show_bug.cgi?id=17881

Note that the recommendations in the replies here have the unfortunate 
drawback of tying all allocations to one block, scanned by the GC all at 
once, and will only get collected when none of them are referenced. On 
32-bit systems this also leads to a high likelihood of false pointers 
keeping the block alive.

More use cases for the feature request may help push for acceptance.

-Steve


More information about the Digitalmars-d-learn mailing list