<求点拨>编译器对垃圾收集的支持是怎么实现的?
是否都是像java一样,要靠虚拟机JVM来帮助?是否有这方面的资料,如C/C++ gc(不是lib形式的)
谢谢~{:3_197:} 本帖最后由 erlv 于 2010-05-29 11:20 编辑
因为垃圾收集都是对堆空间内动态分配的内存来做管理,所以需要程序运行起来才能得到更多的动态分配信息。
静态编译阶段能完成的垃圾收集很有限。或者说此时就不能叫垃圾收集了,应该叫冗余删除。只能根据程序做静态分析找出空的的指针或者不活跃变量,做删除。这个很有限,能做到跨函数的就很难了,更不用说文件文件之间的分析。
大部分的垃圾收集都必须在运行时有机制支持才行,比如JAVA的VM和C#的CLI。 有没有关于C/C++的垃圾收集器的资料? (不是库支持的) :-)
比较少,只有hp有个,你应该都已经搜到过了:) 垃圾收集不是编译器实现,是CPU运行的时候实现吧 是否都是像java一样,要靠虚拟机JVM来帮助?
是否有这方面的资料,如C/C++ gc(不是lib形式的)
谢谢~{ ...
317316abcd 发表于 2010-05-28 23:18 http://linux.chinaunix.net/bbs/images/common/back.gif
详见c++的smart pointer 垃圾收集不是编译器实现,是CPU运行的时候实现吧
0vk0 发表于 2010-05-29 18:52 http://linux.chinaunix.net/bbs/images/common/back.gif
实际上c++的垃圾收集和java的机制不太一样,出发点也不同. 其实就是内存分配管理 alloc的时候,创建一个节点,free的时候标记这个节点,遍历图,找到可以释放的节点释放,有本书,看看吧。 alloc的时候,创建一个节点,free的时候标记这个节点,遍历图,找到可以释放的节点释放,有本书,看看吧。
prolj 发表于 2010-05-30 13:38 http://linux.chinaunix.net/bbs/images/common/back.gif
好像是 《深入理解计算机系统》
页:
[1]
2