Можно ли использовать сборщик мусора Boehm только для части программы? - PullRequest
5 голосов
/ 30 мая 2010

Я прочитал статью в LinuxJournal о Библиотека сборщика мусора Boehm-Demers-Weiser . Мне интересно использовать его в моей библиотеке вместо моей собственной реализации подсчета ссылок.

У меня только один вопрос: возможно ли использовать gc только для моей общей библиотеки и все еще использовать malloc / free в основном приложении? Я не совсем понимаю, как gc проверяет кучу, поэтому я беспокоюсь о производительности gc в этом случае и возможных побочных эффектах.

Ответы [ 2 ]

2 голосов
/ 30 мая 2010

Пример в ручном состоянии:

Обычно лучше не смешивать выделение мусора с системой malloc - free. Если вы это сделаете, вы должны быть осторожны, чтобы не хранить указатели на кучу мусора в памяти, выделенной системой malloc.

А точнее для C ++:

В случае C ++ вы должны быть особенно осторожны, чтобы не хранить указатели на кучу мусора в областях, которые не отслеживаются сборщиком. Сборщик включает некоторые альтернативные интерфейсы , чтобы упростить это.

Глядя на исходный код в руководстве, вы увидите, что сборка мусора осуществляется через определенные вызовы, следовательно, управление обрабатывается отдельно (сборщиком или вручную). Так что, пока ваша библиотека правильно обрабатывает свои внутренние компоненты и не предоставляет собранную память, все будет в порядке. Вы не знаете, как другие библиотеки управляют своей памятью, и вы тоже можете их использовать, не так ли? :)

1 голос
/ 30 мая 2010

Я считаю, что да, вы можете смешать два: однако , если вы выделяете объект с помощью обычного распределителя, который содержит ссылку на объект, который вы выделяете вместе с объектом для сбора мусора, тогда эта ссылка не будет быть видимым для GC, так что объект может быть преждевременно освобожден.

Посмотрите на спецификацию функции GC_MALLOC_UNCOLLECTABLE , если вам нужен GC для учета ссылок в памяти, которые не должны собираться.

В целом, да, но здесь будут драконы , если вы не будете осторожны!

...