Вы также можете использовать Консервативный сборщик мусора Boehm .По сути, вы заменяете каждый malloc
в исходном коде на GC_malloc
(и т. Д.), И вы не удосуживаетесь позвонить free
.GC от Boehm не выделяет память быстрее, чем malloc (она примерно одинакова или может быть на 30% медленнее), но имеет преимущество в том, что она автоматически обрабатывает бесполезные зоны памяти, что может улучшить вашу программу (и, конечно, облегчить кодирование,так как тебя больше не волнует бесплатное).GC от Boehm также может быть использован в качестве распределителя C ++.
Если вы действительно думаете, что malloc
слишком медленный (но вы должны тестировать; большинство malloc
-с занимает меньше, чеммикросекунды), и если вы полностью понимаете поведение своей программы при распределении, вы можете заменить некоторые malloc-ы своим специальным распределителем (который может, например, получать память из ядра большими порциями, используя mmap
, и управлять памятью самостоятельно.).Но я считаю, что делать это - боль.В C ++ у вас есть концепция allocator и std::allocator_traits
, с большинством стандартных контейнеров шаблонов, принимающих такой распределитель (см. Также std::allocator
), например, необязательный второй аргумент шаблона для std::vector
и т. д. *
Как и другие предполагали, если вы считаете, что malloc
является узким местом, вы можете распределять данные порциями(или используя арены), или просто в массиве.
Иногда может помочь реализация специализированного копирования сборщик мусора (для некоторых ваших данных).Подумайте, возможно, MPS .
Но не забывайте, что преждевременная оптимизация - это зло , и, пожалуйста, сравните и профилируйте ваше приложение, чтобы точно понять, где теряется время.