Я хочу разработать многопоточное приложение 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 ++?
С уважением.