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, the Portable.NET project, 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.

Boehm GC free software is distributed under a permissive free software licence similar to that of X11.

[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;
}

[edit] External links


In other languages