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.