免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: daxiguagg
打印 上一主题 下一主题

[C] C语言有没有什么垃圾回收的库 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2014-03-14 23:16 |只看该作者
不过虚幻游戏引擎的GC是怎么实现的还是个问题。
照我看来,C/C++缺少编译器的支持,实现的GC是不可靠的。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
42 [报告]
发表于 2014-03-15 01:28 |只看该作者
shan_ghost 发表于 2014-03-10 14:42
回复 12# bruceteen


以前256M内存跑eclipse,一垃圾回收程序就没有响应、标题栏白掉。隔几分钟来一次,像宫缩一样。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
43 [报告]
发表于 2014-03-15 17:52 |只看该作者
主要就是Boehm GC,也就是LZ提到的libgc。
BGC有很多项目都在使用。包括一些编程语言的实现,原本是有机会实现精确gc的,都放弃而直接使用BGC了。
比如:
* [url=http://ecls.sourceforge.net/new-manual/ch28.html#ext.memory.intro]Embeddable Common Lisp[/url]
* Guile(Scheme)
尤其说明了直接使用保守gc的原因
The list of global variables is usually not too difficult to maintain, since global variables are relatively rare. However, an explicitly maintained list of local variables (in the author’s personal experience) is a nightmare to maintain. Thus, the BDW-GC uses a technique called conservative garbage collection, to make the local variable list unnecessary.

也可以理解为: I'm lazy。。。
* http://en.wikipedia.org/wiki/Boe ... ctor#Uses_and_ports <- 其他使用了BGC的项目

而其他的保守gc没有经过实践考验不太靠谱的样子,比如TinyGC

论坛徽章:
0
44 [报告]
发表于 2014-03-15 22:47 |只看该作者
shan_ghost 发表于 2014-03-13 11:55
我说的是“状态改变”,不是“内存状态改变”。


支持一下shan_ghost,我一直以为,内存泄漏是反映代码潜在逻辑错误的易见的表象。所以valgrind是我提高代码正确可能的最佳手段,几乎每每在我通读好几遍代码,自信满满的,而程序也执行无误的情况下,它却提醒着我一个又一个潜在的bug,哪怕那只是一小段代码中。

论坛徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龙
日期:2013-12-27 13:40:49亥猪
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龙
日期:2014-01-26 17:02:25午马
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
45 [报告]
发表于 2014-03-19 16:26 |只看该作者
c++里有,boost

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
46 [报告]
发表于 2014-03-21 02:47 |只看该作者
GC对于C之类的语言来说很难高效实现。
高效的GC要点之一就是要能在内存中挪动对象,保证内存空间的连续性
典型如Java中的分代标记清除算法,它会在内存中划出若干个连续的内存区域,分配操作只需在最年轻的区域顶部划出一块,当这个内存区域满了之后,会扫描该区域,将所有活对象搬移到下一代的内存空间中,然后这一代的整个空间就可以直接清除,无需像malloc/free一样维护free/busy list,效率大大提高。
但是对于C/C++之类能直接访问内存的语言来说,这种方式完全不可行。

至于BoehmGC之类的保守GC,它们的效率和可靠性实在是很成问题,使用BCG后,不但没有太大收获,反而会给你的C程序带来Java的缺点(确定性丧失,资源的finalization不能保证,内存依然可能泄露,悬空指针依然存在……)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP