Эффективно выделяет множество короткоживущих мелких объектов

У меня есть небольшой класс (16 байт в 32-битной системе), который мне нужно динамически распределять. В большинстве случаев время жизни любого данного экземпляра очень короткое. Некоторые экземпляры также могут передаваться через границы потоков.

Проведя некоторое профилирование, я обнаружил, что моя программа, похоже, тратит больше времени на выделение и освобождение вещей, чем на самом деле тратит их, поэтому я хочу заменить новый по умолчанию и удалить что-то более эффективное.

Для большого объекта (например, соединений БД, которые дорого построить, а не выделить), я уже использую систему пула, однако это включает в себя список для хранения «свободных» объектов, а также мьютекс для безопасности потоков , Между мьютексом и списком он на самом деле работает хуже, чем с базовым new / delete для маленьких объектов.

Я нашел несколько небольших распределителей объектов в Google, однако они, похоже, используют глобальный / статический пул, который не используется потокобезопасным способом, что делает их непригодными для моего использования :(

Какие еще варианты у меня есть для эффективного управления памятью таких маленьких объектов?

Ответы на вопрос(3)

Ваш ответ на вопрос