使用Boehm垃圾回收器仅针对程序的部分是否可能?

7

我已经阅读了关于Boehm-Demers-Weiser垃圾回收库LinuxJournal文章。 我有兴趣在我的库中使用它,而不是使用自己的引用计数实现。

我只有一个问题:是否可能仅针对我的共享库使用gc,并仍在主应用程序中使用malloc / free?我不太理解gc如何检查堆栈,因此我担心在这种情况下gc的性能和可能的副作用。

2个回答

3

手册中的示例指出:

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

对于C++而言,更具体地说:

在C++中,您需要特别小心,不要将指向垃圾收集堆的指针存储在未被收集器追踪的区域中。收集器包括一些替代接口来使这更容易。

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


2
我认为是的,你可以混合使用两种分配器。但是,如果你使用常规分配器分配一个对象并持有一个指向使用垃圾回收分配器分配的对象的引用,那么该引用对于垃圾回收器来说将不可见,因此该对象可能会被过早地释放。
如果需要垃圾回收器考虑不应被回收的内存中的引用,请查看GC_MALLOC_UNCOLLECTABLE函数的说明。
总之,是可以混用的,但是要小心,可能会有风险。

“这里有龙”通常不是指未知领域吗? - Matthieu M.
我认为在混合分配环境中尝试调试GC双重释放问题就像试图在一张标注着“此处有龙”的地图区域中导航一样困难。 ;) - James
谢谢。你的回答和Pieter的回答非常接近我需要知道的内容。 - bialix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接