是否可以仅为程序的一部分使用Boehm垃圾收集器?

时间:2010-05-30 07:05:03

标签: c++ c garbage-collection boehm-gc

我看过关于article in LinuxJournalBoehm-Demers-Weiser garbage collector library。我很有兴趣在我的库中使用它而不是我自己的引用计数实现。

我只有一个问题:是否可以仅将gc用于我的共享库,并且仍然在主应用程序中使用malloc / free?我不太明白gc如何检查堆,所以我担心在这种情况下gc的性能和可能的副作用。

2 个答案:

答案 0 :(得分:2)

手册中的example说明:

  

通常最好不要将垃圾收集分配与系统malloc - free混合使用。如果这样做,则需要注意不要将指向垃圾收集堆的指针存储在使用系统malloc分配的内存中。

更具体地说是C ++:

  

对于C ++,您需要特别注意不要在收集器未跟踪的区域中存储指向垃圾收集堆的指针。收集者包括some alternate interfaces以使其更容易。

查看手册中的源代码,您将看到通过特定调用处理垃圾收集内存,因此,管理将单独处理(由收集器或手动)。因此,只要您的库正确处理其内部并且不暴露收集的内存,您应该没问题。你不知道其他图书馆如何管理你的记忆,你也可以使用它们,不是吗? :)

答案 1 :(得分:1)

我相信是的,你可以混合使用两个:然而如果你用普通的分配器分配一个对象,该分配器保存对你用垃圾收集器分配的对象的引用,那么引用将是GC不可见,因此对象可能会过早解除分配。

如果您需要GC考虑内存中不应收集的引用,请查看GC_MALLOC_UNCOLLECTABLE函数规范。

总之,是的,但如果你不小心,这里就是龙