Antipattern in core.memory.GC.addRange?
Steven Schveighoffer
schveiguy at yahoo.com
Fri Sep 22 21:29:10 UTC 2017
GC.addRange has this signature:
static nothrow @nogc void addRange(in void* p, size_t sz, const TypeInfo
ti = null);
I see a large problem with this. Let's say you malloc an array of struct
pointers:
struct Foo { ... }
import core.stdc.stdlib;
auto ptrs = (cast(Foo *)malloc(Foo.sizeof * 10))[0 .. 10];
Now, you want to store GC pointers in that block, you need to add the
range to the GC:
GC.addRange(ptrs.ptr, ptrs.length);
See the problem? Why would addRange work this way, when D has such a
better mechanism for this? Can we fix it?
-Steve
More information about the Digitalmars-d
mailing list