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