Память кучи и распределение плит

Я запутался в отношении heapи free list. У меня есть несколько вопросов, и у меня есть собственное понимание того, как malloc работает в C. Пожалуйста, поправьте меня, если я ошибаюсь.

  • Организована ли куча памяти как связанный список (свободный список)данных блоки?
  • Есть ли разница между кучей памяти и свободным списком?

Мое понимание распределения памяти (открыто для улучшения):- Когда мы вызываем malloc, он выделяет память в куче, и делает это, выбирая блок данных подходящего размера из free list, верно?

Когда malloc возвращает определенный блок памяти, он удаляется из списка свободных-и физический адрес этого блока памяти обновляется в таблице страниц.

Когда память освобождается с помощью free(), блок данных вставляется обратно в список свободных-и, возможно, для уменьшения фрагментации, соединяется с соседним блоком, а бит presentв странице запись в таблице очищается.

Таким образом, вся куча представляет собой свободный-список(связанный список свободных блоков)+ выделенные блоки данных.

Это полное представление о распределении памяти?

РЕДАКТИРОВАТЬ :Из разработки ядра Linux (Роберт Лав )Глава об управлении памятью, Распределение блоков

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

Свободный-список упоминается как "блок доступной, выделенной структуры данных".

  • Как онвыделяется, когда он находится в free-list ?
  • И почему возврат блока памяти в свободный список_отличается_от освобождения этого блока?
  • Чем выделение блоков памяти отличается от выделения памяти
7
задан Sharat Chandra 12 April 2012 в 01:27
поделиться