Похоже, что функции резерва / перефразирования только предварительно распределяют количество сегментов, а не память для пар элементов (ключ, vlaue), которые нужно вставить.
Есть ли способ, которым мы можем предварительно выделить память для элементов, чтобы приложения с малой задержкой не тратили время на динамическое распределение памяти.
Одной из возможностей будет написать свой собственный распределитель. Это может быть особенно эффективно, если у вас есть хотя бы правильное представление о том, сколько элементов может оказаться в таблице (так что вы можете предварительно выделить место для всех них), и вам не нужно повторно использовать пространство для элементов, если они удалены со стола (поэтому ваша бухгалтерия проста).
В таком случае вы можете предварительно выделить пространство для N объектов и просто отслеживать положение следующего элемента, который будет выделен. Выделение объекта состоит из простого возврата адреса и увеличения указателя, как в return *next++;
Конечно, это на самом деле не устраняет динамическое распределение — оно просто делает его достаточно дешевым, чтобы вы, вероятно, больше не заботились о нем (и, поскольку он предоставляется в качестве параметра шаблона, есть хорошие шансы его расширения внутри строки. , так что вы даже не получаете накладных расходов на вызов функции в процессе.
Даже если вы не можете смириться с таким ограничением для распределителя, распределитель общего назначения для объектов фиксированного размера все равно будет (хотя бы несколько) быстрее, чем распределитель для объектов переменного размера. Это по-прежнему не устранит динамическое распределение, но может дать достаточное улучшение скорости, чтобы работать немного лучше для ваших целей.
Других решений пока нет …