贝姆垃圾收集器

Boehm-Demers-Weiser garbage collector,也就是著名的Boehm GC,是计算机应用在C/C++语言上的一个保守的垃圾回收器,可应用于许多经由C/C++开发的专案,同时也适用于其它执行环境的各类程式语言,包括了GNU版Java编译器执行环境,以及MonoMicrosoft .NET移植平台。同时支援许多的作业平台,如各种Unix作业系统,微软的作业系统(Microsoft Windows),以及麦金塔上的作业系统(Mac OS X),还有更进一步的功能,例如:渐进式收集(incremental collection),平行收集(parallel collection)以及终结语意的变化(variety of finalizer semantics)。

范例

垃圾收集器作用于未变性的(unmodified)C程式,只要简单的将malloc呼叫用GC_malloc取代,将realloc取代为GC_realloc呼叫,如此一来便不需要使用到free的函式。下列的程式码展示出如何用Boehm取代传统的malloc以及free。[1].

#include <assert.h>
#include <stdio.h>
#include <gc.h>

int main(void)
{
    int i;
    const int size = 10000000;

    GC_INIT();
    for (i = 0; i < size; ++i)
    {
        int **p = GC_MALLOC(sizeof *p);
        int *q = GC_MALLOC_ATOMIC(sizeof *q);

        assert(*p == 0);
        *p = GC_REALLOC(q, 2 * sizeof *p);
        if (i == size-1)
            printf("Heap size = %zu\n", GC_get_heap_size());
    }

    return 0;
}

外部链接