www.digitalmars.com
Last update Mon Jun 19 20:51:25 2006

std.gc

The garbage collector normally works behind the scenes without needing any specific interaction. These functions are for advanced applications that benefit from tuning the operation of the collector.

void addRoot(void* p);
Add p to list of roots. Roots are references to memory allocated by the collector that are maintained in memory outside the collector pool. The garbage collector will by default look for roots in the stacks of each thread, the registers, and the default static data segment. If roots are held elsewhere, use addRoot() or addRange() to tell the collector not to free the memory it points to.

void removeRoot(void* p);
Remove p from list of roots.

void addRange(void* pbot, void* ptop);
Add range to scan for roots.

void removeRange(void* pbot);
Remove range.

void fullCollect();
Run a full garbage collection cycle.

The collector normally runs synchronously with a storage allocation request (i.e. it never happens when in code that does not allocate memory). In some circumstances, for example when a particular task is finished, it is convenient to explicitly run the collector and free up all memory used by that task. It can also be helpful to run a collection before starting a new task that would be annoying if it ran a collection in the middle of that task. Explicitly running a collection can also be done in a separate very low priority thread, so that if the program is idly waiting for input, memory can be cleaned up.

void genCollect();
Run a generational garbage collection cycle. Takes less time than a fullcollect(), but isn't as effective.

void minimize();
Minimizes physical memory usage

void disable();
void enable();
disable() temporarilly disables garbage collection cycle, enable() then reenables them.

This is used for brief time critical sections of code, so the amount of time it will take is predictable. If the collector runs out of memory while it is disabled, it will throw an OutOfMemory exception. The disable() function calls can be nested, but must be matched with corresponding enable() calls. By default collections are enabled.

void* getGCHandle();
Get handle to the collector.

void setGCHandle(void* p);
Set handle to the collector.