2009-11-12 2 views
1

Мне нужна структура пула, которая может повторно использовать/перезаписывать память после использования, т. Е. НЕ выполнять какое-либо распределение или освобождение на лету (хотя вам все равно необходимо выделить память в момент запуска программы)Есть ли какая-либо структура перерабатывающего бассейна в C++ Boost?

Boost.Pool не поддерживает такой механизм; есть ли альтернатива?

ответ

1

Стандартные механизмы кучи повторно используют память после ее освобождения; один диапазон адресов может использоваться многими разными значениями за время жизни программы. Однако, как вы полагаете, такие механизмы действительно приобретают память из системы по мере необходимости во время выполнения.

Если вам нужно предварительно распределить требуемый объемный кусок памяти, а затем извлечь из него выделения, вы должны смотреть на чувствительные вещи, например перегружать глобальный оператор new и его друзьям делать выделение из предварительно распределенного пространства, предположительно бросая исключения, когда предварительно выделенное пространство заканчивается. [Не пробуйте это без надзора со стороны взрослых и не смотрите на меня за этим наблюдением; Я цыпленок!]

2

А как же просто выделить много места для пула, как только вы его создадите? Функция pool::orderedMalloc(n) похоже делает именно это.

Да, вы по-прежнему выделяете «время выполнения», но только по мере запуска процесса.

Смежные вопросы