C++0x中的垃圾收集,第1张

C++0x中的垃圾收集,第2张

在过去的两年里,我一直对gc感兴趣,:D已经在这个项目中使用了两年。从C++到C,gc模块的实现变了,但本质没变。我非常欢迎C++加入gc,之前写的另一篇博客已经表达过了。

我记得两年前,当我有机会当面询问比雅尼·斯特劳斯特鲁普关于C++的发展时,我毫不犹豫地说出了我对gc的迫切期望,希望我能以最低的成本把gc加入到C++中。因为我已经用C++实现了一些gc模块,所以有一些语言要求。当时我描述了我的想法,可惜我英语太差,说不清楚:(因为不明白我的意思,比雅尼·斯特劳斯特鲁普和他老人家显得很无奈。最后,他只是建议中国程序员应该参与语言的标准化。一直以来,C++标准委员会中似乎没有来自中国大陆的程序员。

既然C++是你的工具,你应该试着说出你对工具改进的需求。

其实我的需求很简单,就是在C++中加入一些数据结构中数据类型的有限描述。其实如果只做内存管理,类型信息只需要区分数据和指针就可以了。可以忽略特定的数据类型。

我的想法是给每个类增加一个额外的表,像一个虚拟表,来描述指针在这个对象中的位置(记录一个偏移量)。因为C++的对象布局比较复杂,如果不在编译器中做,这项工作会相当麻烦。有了这些信息,gc可以很容易地遍历内存。看那篇文章的介绍,C++里的gc好像都是用gc_strict gc_relax之类的关键词来描述一个完整的内存区域是否有指针,而没有对每一个数据都更加细致准确。这类似于c的现有gc库实现。我猜这些是为了兼容POD类型而设计的。对于C++自己的类,应该是比较好解决的。毕竟,编译器知道所有的类型信息。

此外,遍历堆栈仍然是个问题,但已经好多了。可以用各种语法糖实现遍历。反正C++有了模板之后,任何怪异的写法都可以。

最后说两句gc的效率问题。认为gc没有人肉内存管理效率高是一种普遍的误解。如果你自己实现一个gc模块而不是猜测,然后做代码分析,很容易相信gc能带来更高的性能。关于gc和人肉内存管理之间的性能话题,之前写的文章太多了,杂音太多,嚼之无味。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++0x中的垃圾收集

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情