Ответ действительно зависит от того, почему вам может потребоваться динамическое выделение памяти. Что делает система, которая должна распределять память, но не может использовать статический буфер? Ответ на этот вопрос поможет вам в управлении памятью. Оттуда вы можете определить, какую структуру данных вы хотите использовать для управления вашей памятью.
Например, мой друг написал что-то вроде видеоигры, которая выводила видео в виде строк развертки на экран. Эта команда определила, что память будет выделена для каждой строки развертки, но было определенное ограничение на количество байтов, которое может быть для любой данной сцены. После рендеринга каждой строки развертки все временные объекты, выделенные во время этого рендеринга, были освобождены.
Во избежание утечек памяти и по причинам производительности (это было в 90-х годах, а компьютеры работали медленнее), они использовали следующий подход: они предварительно выделяли буфер, который был достаточно большим, чтобы удовлетворить все распределения для линия сканирования, в соответствии с параметрами сцены, которые определяют максимальный необходимый размер. В начале каждой строки сканирования был установлен глобальный указатель на начало строки сканирования. Поскольку каждый объект был выделен из этого буфера, было возвращено значение глобального указателя, и указатель был перемещен на следующую позицию, выровненную по машинному слову, после выделенного количества байтов. (Это выравнивание выравнивания было включено в первоначальный расчет размера буфера, и в 90-х годах оно составляло четыре байта, но теперь должно быть 16 байтов на некоторых устройствах.) В конце каждой строки сканирования глобальный указатель сбрасывался на начало буфер.
В сборках "отладка" было два буфера сканирования, которые были защищены с помощью защиты виртуальной памяти во время чередующихся строк сканирования. Этот метод обнаруживает устаревшие указатели, используемые с одной строки сканирования на следующую.
Буфер памяти строки сканирования может называться «пулом» или «ареной» в зависимости от того, кого вы спрашиваете. Важным моментом является то, что это очень простая структура данных, которая управляет памятью для определенной задачи. Это не общий менеджер памяти (или, по сути, «реализация бесплатного хранилища»), такой как malloc
, который может быть тем, о чем вы просите.
Вашему приложению может потребоваться другая структура данных для отслеживания вашего свободного хранилища. Какова ваша заявка?