簡體   English   中英

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

[英]Is it possible to use Boehm garbage collector only for the part of the program?

在LinuxJournal上讀過有關Boehm-Demers-Weiser垃圾收集器庫的文章 我很有興趣在我的庫中使用它而不是我自己的引用計數實現。

我只有一個問題:是否可以僅將gc用於我的共享庫,並且仍然在主應用程序中使用malloc / free? 我不太明白gc如何檢查堆,所以我擔心在這種情況下gc的性能和可能的副作用。

手冊中的示例說明:

通常最好不要將垃圾收集分配與系統malloc - free 如果這樣做,則需要注意不要在使用系統malloc分配的內存中存儲指向垃圾收集堆的指針。

更具體地說是C ++:

對於C ++,您需要特別注意不要在收集器未跟蹤的區域中存儲指向垃圾收集堆的指針。 收集器包含一些備用接口,以使其更容易。

查看手冊中的源代碼,您將看到通過特定調用處理垃圾收集的內存,因此,管理將單獨處理(由收集器或手動)。 因此,只要您的庫正確處理其內部並且不暴露收集的內存,您應該沒問題。 你不知道其他圖書館如何管理你的記憶,你也可以使用它們,不是嗎? :)

我相信是的,您可以將兩者混合使用: 但是如果您使用普通分配器分配一個對象,該對象保存對您使用垃圾收集器分配的對象的引用,那么該引用將不會對GC可見,因此該對象可能過早解除分配。

如果您需要GC考慮不應收集的內存中的引用,請查看GC_MALLOC_UNCOLLECTABLE函數規范。

總而言之,是的,但如果你不小心, 這里就是龍

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM