【问题标题】:Is it possible to use Boehm garbage collector only for the part of the program?是否可以仅将 Boehm 垃圾收集器用于程序的一部分?
【发布时间】:2010-05-30 07:05:02
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    手册中的example表示:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 难道这里有龙通常指的是未知领域吗?
      • 好吧,我认为尝试在混合分配环境中调试 GC double-free 就像尝试在地图上标有“这里有龙”的区域中导航;)
      • 谢谢。您的回答和 Pieter 的回答与我需要知道的非常接近。
      猜你喜欢
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多