Boehm garbage collector
From Wikipedia, the free encyclopedia
In computer science, Boehm-Demers-Weiser garbage collector, often simply known as Boehm GC, is a conservative garbage collector for C and C++, which is used by many projects that are implemented in C or C++, as well as by runtime environments for a number of other languages, including the GNU Compiler for Java runtime environment, and the Mono implementation of the Microsoft .NET platform. It supports numerous operating systems, including many Unix variants, Microsoft Windows, and Mac OS X, and provides a number of advanced features including incremental collection, parallel collection and a variety of finalizer semantics.
[edit] Example
The garbage collector works with most unmodified C programs, simply by replacing malloc with GC_malloc calls, replacing realloc with GC_realloc calls, and removing free calls. The code piece below shows how one can use Boehm instead of traditional malloc and free in C [1].
#include "gc.h" #include <assert.h> #include <stdio.h> int main() { int i; GC_INIT(); for (i = 0; i < 10000000; ++i) { int **p = (int **) GC_MALLOC(sizeof (int *)); int *q = (int *) GC_MALLOC_ATOMIC(sizeof (int)); assert(*p == 0); *p = (int *) GC_REALLOC(q, 2 * sizeof (int)); if (i % 100000 == 0) printf("Heap size = %d\n", GC_get_heap_size()); } return 0; }