У меня есть небольшой класс (16 байт в 32-битной системе), который мне нужно динамически распределять. В большинстве случаев время жизни любого данного экземпляра очень короткое. Некоторые экземпляры также могут передаваться через границы потоков.
Проведя некоторое профилирование, я обнаружил, что моя программа, похоже, тратит больше времени на выделение и освобождение вещей, чем на самом деле тратит их, поэтому я хочу заменить новый по умолчанию и удалить что-то, что немного более эффективно.
Для большого объекта (соединения БД, как это бывает, которые дорого построить, а не распределить), я уже использую систему пула, однако это включает в себя список для хранения «свободных» объектов, а также мьютекс для безопасности потока. Между мьютексом и списком он на самом деле работает хуже, чем с базовым new / delete для маленьких объектов.
Я нашел несколько небольших распределителей объектов в Google, однако они, похоже, используют глобальный / статический пул, который не используется потокобезопасным способом, что делает их непригодными для моего использования: (
Какие еще варианты у меня есть для эффективного управления памятью таких маленьких объектов?