Запрос на пулы памяти в C++

Можно ли создать реализацию пула памяти, которая следует простой логике:

1 - Выделите n байтов из пула памяти.

2 - использовать измененный новый (); функция / оператор, который не выделяет память, получает только указатель на начало пула памяти. Таким образом, объекты создаются динамически без накладных расходов.

3 - Когда пул памяти заканчивается, он освобождает то, что от него осталось, и выделяет новый пул памяти

4 - объекты, созданные в первом пуле памяти, оставляются для выбора памяти в зависимости от их размеров. Разница между тем, что было выделено в первом пуле, и тем, что было возвращено, когда он иссяк, восстанавливается объектами после их удаления.

В основном меня беспокоит тот факт, что я понятия не имею, как удалить пул памяти, меньший, чем он был выделен, помня о том, что помимо того, что осталось в конце объекта пула памяти, есть также заголовок ОС для пула памяти. то есть перед первым объектом, размещенным в пуле. Какой подход мне нужен, чтобы убедиться, что нет утечки памяти, что удаление избыточного пула памяти не приведет к удалению объектов, выделенных в нем, и что заголовок для фрагмента пула памяти будет безопасно удален.

Спасибо!

РЕДАКТИРОВАТЬ: Обратите внимание, что цель состоит в том, чтобы память была выделена пулом памяти и освобождена объектами, которые могут иметь различное время жизни. Если это вообще возможно...

1 ответ

Решение

Во-первых, это звучит как распределитель арены (как упомянуто в комментариях), если вы хотите знать, что вы должны искать.

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

Во-вторых, единственный известный мне способ распределения памяти, который вы можете затем сжать без возможности перемещения (например, realloc), - это использование карт памяти: это зависит от платформы.

Другие вопросы по тегам