贝姆垃圾收集器

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

外部链接