Похоже, вы хотите предварительно выделить память в своем коде инициализации, чтобы ваш обработчик прерываний мог избежать выделения кучи. Я предполагаю, что элементы, которые вы храните в этих контейнерах, сами по себе не выполняют никакого выделения кучи, потому что это усложнит ответ.
Вы можете предварительно выделить память для std::vector
, вызвав метод reserve()
. Такие методы, как push_back()
, pop()
, insert()
и erase()
, управляют размером вектора (количеством элементов, которые он содержит в настоящее время). Они влияют на емкость (количество элементов, для которых у нее есть место), когда новый размер больше текущей емкости. reserve(x)
гарантирует, что емкость больше или равна x
, увеличивая емкость при необходимости. (Также обратите внимание, что единственной операцией, которая когда-либо уменьшает емкость вектора, является swap()
, поэтому вам не нужно беспокоиться о erase()
уменьшении емкости вектора.)
Этот подход не будет работать для std::list
, но есть другой подход, который будет: предварительно выделять элементы списка, вставляя их в «запасной» список. Вместо вставки новых элементов используйте метод splice()
, чтобы переместить их из «запасного» списка в «основной» список. Вместо стирания элементов используйте метод splice()
, чтобы переместить их из «основного» списка в «запасной» список.