代码之家  ›  专栏  ›  技术社区  ›  bialix

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

  •  5
  • bialix  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Pieter    14 年前

    这个 example 在手动状态下:

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

    更具体地说,C++:

    在C++的情况下,您需要特别小心不要将指针存储到未被收集器跟踪的区域中的垃圾收集堆中。收藏家包括 some alternate interfaces 使之更容易。

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

        2
  •  1
  •   James    14 年前

    我相信是的,你可以把这两者混合起来: 然而 如果使用普通分配器分配对象,该分配器保存对垃圾回收器分配的对象的引用,则GC将看不到该引用,因此该对象可能被过早释放。

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

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