Запрос на пулы памяти в C++
Можно ли создать реализацию пула памяти, которая следует простой логике:
1 - Выделите n байтов из пула памяти.
2 - использовать измененный новый (); функция / оператор, который не выделяет память, получает только указатель на начало пула памяти. Таким образом, объекты создаются динамически без накладных расходов.
3 - Когда пул памяти заканчивается, он освобождает то, что от него осталось, и выделяет новый пул памяти
4 - объекты, созданные в первом пуле памяти, оставляются для выбора памяти в зависимости от их размеров. Разница между тем, что было выделено в первом пуле, и тем, что было возвращено, когда он иссяк, восстанавливается объектами после их удаления.
В основном меня беспокоит тот факт, что я понятия не имею, как удалить пул памяти, меньший, чем он был выделен, помня о том, что помимо того, что осталось в конце объекта пула памяти, есть также заголовок ОС для пула памяти. то есть перед первым объектом, размещенным в пуле. Какой подход мне нужен, чтобы убедиться, что нет утечки памяти, что удаление избыточного пула памяти не приведет к удалению объектов, выделенных в нем, и что заголовок для фрагмента пула памяти будет безопасно удален.
Спасибо!
РЕДАКТИРОВАТЬ: Обратите внимание, что цель состоит в том, чтобы память была выделена пулом памяти и освобождена объектами, которые могут иметь различное время жизни. Если это вообще возможно...
1 ответ
Во-первых, это звучит как распределитель арены (как упомянуто в комментариях), если вы хотите знать, что вы должны искать.
Обратите внимание, что арены действительно полезны, только если вы планируете разрушить все это сразу; если вы ожидаете вернуть память из удаленных объектов для повторного использования, то в итоге вы создадите свою собственную кучу, расположенную на вершине арены. Если вы просто хотите сохранить кусок арены до тех пор, пока последний объект не будет освобожден, вы можете сделать это с помощью повторного счета.
Во-вторых, единственный известный мне способ распределения памяти, который вы можете затем сжать без возможности перемещения (например, realloc), - это использование карт памяти: это зависит от платформы.