什么免费和商业垃圾收集库可用于C++,每个库的优缺点是什么?
我对来自该领域实际使用的来之不易的教训感兴趣,而不是营销或宣传模糊.
没有必要详细说明与自动垃圾收集相关的常规权衡,但请提及所使用的算法(引用计数,标记和扫描,增量等)并简要总结后果.
我过去使用过Boehm收藏家并取得了很大的成功.它是开源的,可用于商业软件.
它是一个保守的收藏家,并且由垃圾收集技术领域最重要的研究人员之一拥有悠久的发展历史.
Boost有很多智能指针,可以引用引用计数或删除范围退出或侵入引用计数.这些已经证明足以满足我们的需求.一个很大的优点是它都是免费的,开源的,模板化的C++.因为它是引用计数,在大多数情况下,当对象被破坏时它是高度确定的.
Boehm垃圾收集器是免费提供的,据说相当不错(没有亲自体验)
([PDF警告]关于Boehm垃圾收集器的C++ 0x提议的理论论文)
它最初被称为制作C++ 0x ,但毕竟不会制作它(由于我想的时间限制).
Proprosal N2670(对垃圾收集器的最小支持)确实在2008年6月获得批准,因此当编译器实现接受这个,并且标准最终确定时,C++的垃圾收集世界肯定会改变......
我经常使用boehm-gc.它很简单,但文档很差.有一个C++页面,但很难找到.
基本上,您只需确保每个类都继承自其基类,并始终将gc_allocator传递给容器.在许多情况下,您希望使用libgccpp来捕获new和delete的其他用法.这些是很大程度上的高级更改,我们发现我们可以使用#ifdef在编译时关闭GC,并且支持它只会影响一个或两个文件.
我的主要问题是你不能再使用Valgrind了,除非你先关掉收集器.虽然关闭收集器很容易做到,并且不需要重新编译,但如果你开始耗尽内存,显然不可能使用它.