主题:一个简单的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
#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