On Thursday, 7 April 2016 at 16:13:59 UTC, Steven Schveighoffer wrote:
On 4/6/16 3:54 PM, Jonathan Villa wrote:

You are likely running into the GC being conservative. You are also possibly running into an issue where you are expecting the compiler to do something with the stack where it may do something else. A classic question that is asked on D forums all the time is why when you null some variable and then call GC collect, the memory isn't collected. The answer is because quite possibly the value is still in a register, and the registers must be scanned too.

As for conservatism, if you generate a 1-million element array of pointers (each element has a pointer in it), then you have some random stack variable that "happens" to point into that giant array (more likely in 32-bit systems), then both the array, and all it's pointing at gets saved.

-Steve

Good, I compiled the program in 64 bit mode (-m64) and now it release memory normally like in Debian.

I would like to know where can I learn more about the 'register' or the GC for the D so I can avoid future issues.

JV.


Reply via email to