On Monday, 17 August 2015 at 20:07:08 UTC, Steven Schveighoffer wrote:
On 8/17/15 3:57 PM, welkam wrote:
// if the GC kicks in here we're f*****

Why?

static nothrow @nogc void removeRange(in void* p);
Removes the memory range starting at p from an internal list of ranges
to be scanned during a collection. <...>

Because presumably the reason why you have added the range is because it's not GC memory (as in this case). This means that if a GC run kicks in right then, that range of data will not be scanned, and the GC memory it may have been pointing at could potentially be freed.

-Steve

I might be wrong, but he should worry about GC before he removes that memory range from GC managed list not after. And his code smells to me. He gives full memory control to GC, but then wants to take it away, fiddle and give it back. I would allocate more than I need to so avoiding a need to extend the memory. If not then either allocate new chunk of memory, copy data and forget about old one or have a data structure where I could add new chunks of memory. Its best to minimise system calls such as malloc and similar because they hit OS and slow down execution.

Reply via email to