我读了 Linuxjournal中的文章 关于 Boehm-Demers-Weiser垃圾收集器图书馆. 。在我的库中使用它,而不是我自己的参考计数实现,我很有趣。

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

有帮助吗?

解决方案

例子 在手动状态中:

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

更专门针对C ++:

就C ++而言,您需要特别小心,不要将指针存储在收藏家未追踪的区域中的垃圾收集堆中。收藏家包括 一些替代接口 为了变得更容易。

查看手册中的源代码,您会看到通过特定的呼叫来处理垃圾收集的内存,因此,管理人员是分开处理的(由收集器或手动)处理。因此,只要您的库正确处理其内部设备并且不会揭露收集的内存,就应该没事。您不知道其他库如何管理他们的内存,也可以使用它们,不是吗? :)

其他提示

我相信是的,您可以混合两者: 然而 如果将对象分配给对象的普通分配器,该对象对您分配给垃圾收集的对象的引用,那么该引用将不可见,因此该对象可以过早地处理该对象。

看看 gc_malloc_uncollectable 功能规范如果您需要GC考虑不应收集的内存中的参考。

总而言之,是的,但是 这是龙 如果您不小心!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top