是否有人试图使用Apple的autozone garbage collector?或者你能指出一个可以与C ++一起使用的好的可配置的吗?
编辑:我处理决策图(比如BDD),所以我想测试在这种情况下用垃圾收集器管理内存是否有效。
编辑2:更准确地说,在为决策图实现库时,您必须实现垃圾收集器。事实上,我已经为我的库做了这个,但它代表了或多或少25%的代码。它是最复杂的部分:-)所以是的,我想要一个垃圾收集器:-)是的,我已经使用了RAII技术。最后,我承担不起shared_ptr的费用,因为我存储了需要进行垃圾回收的数十亿个对象。
答案 0 :(得分:3)
您是否已经分析过是否确实需要隐式垃圾收集库?你确定它不只是java(或Objective C,...)怀旧吗?
这在C ++中并不自然,因此您可能遇到的问题多于解决的问题。实际实现主要用于实验测试,而不用于生产应用程序。挤压语言潜力的最好方法是按照那种语言解决问题。
首先检查显式垃圾收集(boost :: shared_ptr和friends)是否满足您的需求,并尽可能避免引入复杂性。
亚历山大编辑后2:魔法不存在我害怕。为什么你认为垃圾收集器比RAII习语更有效率。
如果您不需要引用计数,则可以使用scoped_ptr。但是如果你需要它,你将不得不为此付出代价,除了你藏了多少。
也许你的问题是如此多的对象分配。如果它们很小,你会发现“现代C ++设计”(Andrei Alexandrescu)的第4章(小对象分配)非常有趣。
答案 1 :(得分:2)
大多数人倾向于避免使用C ++中的垃圾收集器。
一旦你学会使用RAII来管理你的资源,并且因为C ++没有对垃圾收集的适当支持,它们通常是没有必要的,存在的GC存在一些问题:
当然,有些情况下C ++中的GC很有用。但95%的情况下,只需自己学习适当的内存管理技术(RAII),您就会得到更好的服务。
但是我没有使用过Autozone,也不知道它在你的情况下或一般情况下有多好。
答案 2 :(得分:2)
实际上,垃圾收集是即将推出的C ++ 20XX标准的一部分,但由于实施困难,复杂性等原因而被删除......
所以,当然,很多人在C ++中避免使用GC,但标准委员会正在积极考虑它的强烈要求。
Apple的AutoZone是一种与语言无关的垃圾收集器,可以与C ++一起使用。当然,AutoZone适用于Objective-C(和C)将有助于实现良好的基础。
MacRuby项目也使用AutoZone,我相信还有一些其他项目。它被设计为可移植的,虽然实现具有特定于x86和ppc架构的位 - 如果需要,您需要将其移植到其他CPU类型。
收集器有一个API,可以直接用于注册/取消注册对象和表达连接等......
这并不容易,但肯定是可行的。
答案 3 :(得分:1)