使用AutoZone垃圾收集器

时间:2009-08-04 09:42:11

标签: c++ garbage-collection

是否有人试图使用Apple的autozone garbage collector?或者你能指出一个可以与C ++一起使用的好的可配置的吗?

编辑:我处理决策图(比如BDD),所以我想测试在这种情况下用垃圾收集器管理内存是否有效。

编辑2:更准确地说,在为决策图实现库时,您必须实现垃圾收集器。事实上,我已经为我的库做了这个,但它代表了或多或少25%的代码。它是最复杂的部分:-)所以是的,我想要一个垃圾收集器:-)是的,我已经使用了RAII技术。最后,我承担不起shared_ptr的费用,因为我存储了需要进行垃圾回收的数十亿个对象。

4 个答案:

答案 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)

不,我没试过。您可以尝试从hp实验室 this ,更多详情 here 。此收集器适用于Linux,* BSD,最新Windows版本,MacOS X,HP / UX,Solaris,Tru64,Irix和其他一些操作系统。