Я смущен относительно heap
и free list
. У меня есть несколько вопросов, и у меня есть собственное понимание того, как работает malloc на C. Пожалуйста, исправьте меня, если я ошибаюсь.Память кучи и распределение плиты
- Является ли память кучи организована как связанный список (свободный список) данных блоков?
- Есть ли разница между памятью кучи и свободным списком?
Мое понимание распределения памяти (открыто для улучшения): - Когда мы называем таНос, он выделяет память в куче, и он делает это, выбирая блок данных подходящего размера из free list
, верно?
Когда определенный блок памяти возвращается malloc, он удаляется из бесплатного списка, а физический адрес этого блока памяти обновляется в таблице страниц.
Когда память свободна с использованием free()
, блок данных вставляется обратно в свободный список и, возможно, уменьшает фрагментацию, соединенную с соседним блоком, и бит present
в записи таблицы страниц очищается.
Таким образом, вся куча является свободным списком (связанным списком свободных блоков) + выделенными блоками данных.
Это всеобъемлющая картина распределения хранилища?
EDIT: С Linux Kernel Development (Robert Love) Глава по управлению памятью, распределения Slab
«Свободный список содержит блок доступен, уже выделены, данные, структуры Когда код требует. новый экземпляр структуры данных, он может захватить одну из структур из бесплатного списка, а не выделять достаточный объем памяти и настроить его для структуры данных. Позже, когда структура данных больше не нужна, возвращается в бесплатный список вместо dealloca Тед. В этом смысле, в свободный список действует как объект кэша, кэширование часто используемый тип объекта «.
Free-лист упоминается как„блок доступной, выделенной структуры данных.“
- Как это выделяется, когда он находится в свободном списке?
- И как возвращается блок памяти в свободный список _ не _ то же самое, что и освобождение этого блока?
- Как распределение горбыль отличается от распределения памяти
Вы говорите: «malloc() выделяет участки с переменным размером сегмента данных программы». Разве это не куча, о которой вы говорите? Является ли куча частью сегмента данных? Я, хотя они были разные .. –
Куча - это структура данных, расположенная в сегменте данных. Это бухгалтерские данные, которые отслеживают, какие части сегмента данных используются и которые доступны. Как проигранная аналогия, подумайте о роли файловой системы на диске. – Wyzard
Sharat: Я думаю, вы переусердствовали все это - извините! –