使用c/c++中的垃圾收集库——libgc

libgc是一个保守的内存垃圾清理器,它会周期性的扫描程序中的数据,并标记所有的当前在heap对象中正在被使用的内存,随后释放所有未被标记的的内存。
但是,libgc不会检测使用libgc以外的allocator分配的内存空间,也不会对其进行自动的释放。
使用libgc可以解决一下问题:
1、内存的泄露;2、未分配空间就释放(premature frees); 3、内存的碎片。
但它不能解决内存被重写造成的问题。

具体使用:
1、先到 http://www.hpl.hp.com/personal/Hans_Boehm/gc/网站下载软件,包名字为gc.tar.gz

1. ./configure --prefix=……
2. make
3. make   install

2、把头文件<~/gc/include/gc.h>放到方便的地方。
3、编译时连接gc库:方法1:动态链接 gcc memgc.c -lgc -ldl 使用libgc.so, libdl.so两个库
方法2:静态链接 gcc memgc.c ~/gc/lib/libgc.a -lpthread 使用libpthread.so
注:静态链接的好处是可以拷贝到类似的系统中用,而不需要在那台机器上安装gc库

用法示范:
1. 把GC作为内存泄漏的检测工具, 方法如下:

01. #include "../gc/include/leak_detector.h"
02.  
03. int   main()
04. {
05. int   *p[10];
06. int   i;
07. GC_find_leak = 1;
08. //如果去掉这一句,就变成了标准的GC功能,这一句使它按内存检测方式运行
09. for   (i = 0; i < 10; ++i)
10. {
11. p[i] = ( int *) malloc ( sizeof ( int )+i);
12. }
13. for   (i = 2; i < 10; ++i)
14. {
15. free (p[i]);
16. }
17. for   (i = 0; i < 9; ++i)
18. {
19. p[i] = ( int *) malloc ( sizeof ( int )+i);
20. }
21. CHECK_LEAKS();
22. //标准GC不需要这一句,这里强制GC_gcollect();
23. }

编译运行如下:
gcc a.c -lgc -ldl 或者 gcc a.c libgc.a -lpthread
./a.out
显示:
Leaked composite object at 0×805bff0 (b.c:10, sz=5)
Leaked composite object at 0×805afe8 (b.c:10, sz=4)

当我们调试结束后,可以把检测去掉就可以了.
2.一个更有意义的做法是,我们使用标准GC的功能,那么我们根本不用释放申请的内存,不用时就忘掉它好了.

01. #include "../gc6.1/include/gc.h"
02. #define malloc(n) GC_malloc(n)
03. //这样可以方便的使用而不改程序中原有的malloc
04. #include ;
05. int   main()
06. {
07. int   i;
08. char   *p;
09. for   (i = 0; i < 10000; ++i)
10. {
11. p =  malloc (100000* sizeof ( int ));
12. //malloc许多次,没有free
13. if (p==0)
14. {
15. printf ( "No memory/n" ); exit (1);
16. }
17. }
18. }

编译 gcc b.c -lgc -ldl 或者 gcc b.c /usr/local/lib/libgc.a -lpthread
./a.out &
运行时,不会把内存用光的.不会显示No memory信息.

转自:http://www.gomudemi.org/?p=43

资料收集是一个集资料收集,网页收集,和附件收集为一体的工具使用工具,能够把平时您零乱的资料、图片、程序等都存放在一起,统一管理起来。方便您的查找和使用。 资料收集的最大特色是抓取网页内容,可以将网页或是网页的部分文本和链接,分门别类地收集到资料; 并且可以保存几乎所有的格式的文件到附件去。允许通过定制IE的右键菜单来方便采集的过程,除了使用右键, 您还可以在网页选取想要的部分,拖到采集窗里让资料收集;您可以在原有的浏览器采集而不用打开任何程序, 大大节省了系统资源。 书的编辑区采用用户熟悉的目录树结构,使得用户更容易操作。抓取的资源可以自动或手动地加入到不同的节点; 可以直接在编辑区内编辑纯文本、格式文本。文本区不受大小限制,支持段落重排和gb、big5码转换; 书的任何一个节点都支持加密,方便个人和共享用户的使用; 数据的查询支持多达三种的高级搜索方式,使您能更快的定位所需要的内容。 可以象Winamp、QICQ2000一样更换皮肤,资料提供皮肤下载。只要您来到我们的网站下载就行。 资料收集是一个绿色软件,您只要解压缩到某一个目录下就可以使用了,当您认为不想再使用时,直接把它所在的目录删除掉就行了。不会在系统留下任何的垃圾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值