Я запутался в отношении heap
и free list
. У меня есть несколько вопросов, и у меня есть собственное понимание того, как malloc работает в C. Пожалуйста, поправьте меня, если я ошибаюсь.
Мое понимание распределения памяти (открыто для улучшения):-
Когда мы вызываем malloc, он выделяет память в куче, и делает это, выбирая блок данных подходящего размера из free list
, верно?
Когда malloc возвращает определенный блок памяти, он удаляется из списка свободных-и физический адрес этого блока памяти обновляется в таблице страниц.
Когда память освобождается с помощью free()
, блок данных вставляется обратно в список свободных-и, возможно, для уменьшения фрагментации, соединяется с соседним блоком, а бит present
в странице запись в таблице очищается.
Таким образом, вся куча представляет собой свободный-список(связанный список свободных блоков)+ выделенные блоки данных.
Это полное представление о распределении памяти?
РЕДАКТИРОВАТЬ :Из разработки ядра Linux (Роберт Лав )Глава об управлении памятью, Распределение блоков
«Свободный список содержит блок доступных, уже выделенных данных структуры. Когда коду требуется новый экземпляр структуры данных, он может захватить одну из структур из списка свободных, а не выделять достаточный объем памяти и настроить ее для структуры данных. Позже, когда структура данных больше не нужна, она возвращается в свободный список вместо освобожденного. В этом смысле свободный список действует как кеш объектов,кэширование часто используемого типа объекта."
Свободный-список упоминается как "блок доступной, выделенной структуры данных".