Стандартная библиотека C ++ и сборщик мусора Boehm

Я хочу разработать многопоточное приложение C ++ (где в конечном итоге большая часть кода C ++ будет генерироваться самим приложением, что может быть рассматривается как язык домена высокого уровня) в Linux / AMD64 / Debian с GCC 4.6 (и, вероятно, последним стандартом C ++ 11).

Я действительно хочу использовать консервативный сборщик мусора Боэма для всех мои распределения кучи, потому что я хочу выделить с помощью new (GC) и никогда не беспокоиться о delete . Я предполагаю, что GC Бема работает достаточно хорошо.

Основная мотивация использования C ++ (вместо C) - это все алгоритмы и коллекции std :: map ... std :: vector , предоставляемые стандартной библиотекой C ++.

Сборщик мусора Бема предоставляет шаблон gc_allocator (в своем файле gc / gc_allocator.h).

Следует ли переопределить operator :: new как оператор Бема?

Или мне следует использовать все шаблоны коллекций с явным аргументом шаблона распределителя, установленным на некоторый gc_allocator ? Я не совсем понимаю роль второго аргумента шаблона (распределителя) для std :: vector ? Используется ли он для размещения внутренних данных вектора или для выделения каждого отдельного элемента?

А как насчет std :: string -s? Как сделать так, чтобы их данные были размещены в GC? Должен ли я иметь свою собственную строку, используя шаблон basic_string с gc_allocator ? Есть ли способ получить внутренние массивы char, выделенные с помощью GC_malloc_atomic , а не GC_malloc ?

Или вы не советуете использовать Boehm GC с приложением, скомпилированным g ++?

С уважением.

6
задан Collin 28 November 2014 в 17:15
поделиться