Boehm garbage collector

Boehm-Demers-Weiser garbage collector, w skrócie Boehm GC – konserwatywny odśmiecacz dla języków C i C++, używany przez wiele projektów w C, C++, a także przez środowiska uruchomieniowe wielu innych języków, w tym GNU Compiler for Java, projekt Portable.NET i implementację platformy .NET Mono. Działa na wielu systemach operacyjnych w tym na wielu wariantach Uniksa, na Microsoft Windows i OS X i udostępnia zaawansowane funkcje takie jak odśmiecanie przyrostowe, równoległe i różne składnie finalizerów.

Boehm GC to wolne oprogramowanie i jest dostępny na licencji podobnej do X11.

Przykład

edytuj

Odśmiecacz działa z prawie niezmienionymi programami w C, potrzebna jest tylko podmiana wywołań malloc na GC_malloc, realloc na GC_realloc, i usunięcie wywołań free. Poniższy kod pokazuje jak można użyć Boehm zamiast funkcji malloc i free w 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;
}

Linki zewnętrzne

edytuj