Если все объекты имеют одинаковый размер, попробуйте простой распределитель ячеек с навязчивым связанным списком свободных узлов:
free:
add node to head of list
allocate:
if list is non-empty:
remove the head of the list and return it
else:
allocate a large block of memory
split it into cells of the required size
add all but one of them to the free list
return the other one
Если выделение и освобождение выполняются в одном потоке, то вы нене нужно никакой синхронизацииЕсли они выполняются в разных потоках, то, возможно, переключение контекста на 40 Кбит / с вызывает больше беспокойства, чем распределение на 40 Кбит / с; -)
Вы можете сделать ячейки просто «необработанной памятью» (и использовать размещениеnew или оператор перегрузки (new для вашего класса), либо оставляйте объекты инициализированными всегда, даже когда они находятся в «свободном списке», и присваивайте любые значения, которые вам нужны, членам «новых».То, что вы делаете, зависит от того, насколько дорогая инициализация, и, вероятно, от технической разницы между распределителем ячеек и пулом объектов.