Garbage collection, and practical strategies to avoid allocation

Jonathan M Davis jmdavisProg at gmx.com
Sat Jun 1 09:11:28 PDT 2013


On Saturday, June 01, 2013 09:43:49 bearophile wrote:
> >  - GC runs at unpredictable moments
> 
> Is this true? I think the D GC runs only when you allocate
> something.

Sure, but which of these calls to new is going to cause the GC to run?

auto a = new Foo;
...
auto b = new Bar;
...
auto c = new Baz;

It could be that all or none of them do. It all depends on what memory is 
available at the time and what exactly they're trying to allocate. So, while 
you may be able to know that the GC will only run when new is called, you 
don't know which new will trigger it, and it can (and probably will) vary on 
each run of the program. Pretty much the only way to control it is to disable 
the GC and then explicitly do a collection when you can afford a collection to 
run (though in a program like those Manu typically writes, where you're 
generating something like 60 frames per second, the GC is pretty much never 
fast enough to be run - not with anything even vaguely like it's current 
implementation).

- Jonathan M Davis


More information about the Digitalmars-d mailing list