Есть ли какая-либо структура пула утилизации в C ++ Boost? - PullRequest
1 голос
/ 12 ноября 2009

Мне нужна структура пула, которая может повторно использовать / перерабатывать память после использования, т. Е. НЕ делать никакого выделения или освобождения на лету (хотя вам все равно нужно выделять память в момент запуска программы)

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

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

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

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

1 голос
/ 12 ноября 2009

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

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

...