Интеграция сборщика мусора Boehm и стандартной библиотеки C
Чтобы плавно интегрировать консервативный сборщик мусора Boehm с коллекциями стандартной библиотеки C, существует два основных подхода :
Переопределение оператора ::new
Этот подход предполагает переопределение оператора ::new для использования GC Боема. Однако он может конфликтовать с существующим кодом C и может быть непереносим между разными компиляторами.
Явный аргумент распределителя
Вместо переопределения оператора ::new вы можете использовать второй аргумент шаблона коллекций стандартных библиотек для указания пользовательского распределителя. Этот аргумент управляет тем, как выделяется память для внутренних структур данных коллекции.
Пример с std::vector
Следующий код демонстрирует, как использовать gc_allocator с std:: вектор:
#include
#include
std::vector> myVector(10); // Allocate vector with GC-specific allocator
std::string Integration
Для std::string вы можете использовать GC_malloc_atomic для явного выделения внутреннего массива символов:
#include
#include
std::string myString((char*)GC_malloc_atomic(10), 10); // Allocate string with GC_malloc_atomic
Примечание:
Как правило, не рекомендуется переопределять оператор ::new при интеграции Boehm GC с g . Вместо этого предпочтите использовать подход с явным аргументом распределителя для большей переносимости и совместимости.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3