7

在 LinuxJournal 中阅读了有关Boehm-Demers-Weiser 垃圾收集器库的文章。我很有趣在我的库中使用它而不是我自己的引用计数实现。

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

4

2 回答 2

3

手册中的示例说明:

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

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

对于 C++,您需要特别小心,不要将指向垃圾收集堆的指针存储在收集器未跟踪的区域中。收集器包括一些备用接口以使其更容易。

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

于 2010-05-30T11:51:25.357 回答
2

我相信是的,您可以将两者混合使用:但是,如果您使用普通分配器分配一个对象,该分配器持有对您通过垃圾收集分配的对象的引用,那么该引用对 GC 将不可见,因此该对象可能被提前释放。

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

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

于 2010-05-30T11:19:58.603 回答