Either I'm confused or the gc is
Ali Çehreli
acehreli at yahoo.com
Mon Nov 16 21:36:01 UTC 2020
On 11/16/20 1:25 PM, Steven Schveighoffer wrote:
> I can imagine a situation where it removes the item from the stack to
> put it somewhere else (e.g. global memory or on the C heap)
> *temporarily*
Good point. For example, they can provide the address of the member of a
heap-allocated object:
Obj * obj = malloc(/* ... */);
D_function(&obj.member);
// <-- Another thread triggers a
// GC collection at this point.
printf("%d", obj.member); // <-- Potentially too late.
This is hard to communicate to the callers. I said "safe to use for
immediate consumption" but still not safe. Documenting like "pointer to
stack allocated data only please" may be too confusing for casual users.
So, the safest thing would be to make a copy with toStringz.
Of course, strings are just one type. I pass GC allocated large buffers
to the C side without copying. Luckily, I am the only consumer so far
and things seem to work. :)
Ali
More information about the Digitalmars-d
mailing list