回 帖 发 新 帖 刷新版面

主题:一个简单的C垃圾回收器

我写了一个C语言的GC库.用法是这样的:
#include "mygc.h"

int main ()
{
    int *p;
    char *q;
    void *t;

    GC_INIT ();
    p = (int *)GC_MALLOC (sizeof (int));
    q = (char *)GC_REALLOC (p, sizeof (char));
    GC_PTR_PASSBY (&t, q); /* 把指针q传递给指针t */

    return 0;
}
我只上传了devcpp的库版本,因为vc2003的版本有很多要设置,太麻烦.
这里试玩, 里面有代码:
http://upload.programfan.com/upfile/200703111740751.rar

说一下大致方法: 这个用的是最简单的一种gc算法-引用计数法. 自己建一个堆(内存池),然后维护一个空闲/占用块链表. 跟一般地内存池差不多,只不过不需要考虑free的问题,这个问题交给后台收集线程去做. 收集线程是这样的,在一定周期,比如10ms,扫描一次指针链表,把引用计数为0的块删除.

大家可以参考一下这些文章:
http://www-128.ibm.com/developerworks/search/searchResults.jsp?searchType=1&searchSite=dWChina&pageLang=zh&langEncoding=UTF8&searchScope=dW&query=gc

回复列表 (共1个回复)

沙发

顶一下,没研究过GC,有时间看一下。

我来回复

您尚未登录,请登录后再回复。点此登录或注册