Understanding the GC

Steven Schveighoffer schveiguy at yahoo.com
Thu Jan 31 07:12:13 PST 2013


On Wed, 30 Jan 2013 03:15:14 -0500, Mike Parker <aldacron at gmail.com> wrote:

> My understanding is that the current implementation only runs  
> collections when memory is allocated. Meaning, when you allocate a new  
> object instance, or cause memory to be allocated via some built-in  
> operations (on arrays, for example), the GC will check if anything needs  
> to be collected and will do it at that time. I don't know if it's run on  
> every allocation, or only when certain criteria or met, and I really  
> don't care. That's an implementation detail. The D language itself does  
> not specify any of that.

This isn't quite accurate.

The GC first checks to see if there is a free block that would satisfy the  
allocation, and if it can't find one, THEN it runs a collection cycle, and  
if then it cannot allocate the block from any memory regained, it then  
asks for more memory from the OS.

This can lead to the collection cycle running quite a bit when allocating  
lots of data.  I don't know if there are any measures to mitigate that,  
but there probably should be.

-Steve


More information about the Digitalmars-d-learn mailing list