Память кучи и выделение слябов

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

Is the heap memory organized as a linked list (free list) of data blocks ? Is there a difference between heap memory and free list ?

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

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

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

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

Это исчерпывающая картина распределения памяти?

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

"A free list contains a block of available, already allocated, data structures. When code requires a new instance of a data structure, it can grab one of the structures off the free list rather than allocate the sufficient amount of memory and set it up for the data structure. Later, when the data structure is no longer needed, it is returned to the free list instead of deallocated. In this sense, the free list acts as an object cache, caching a frequently used type of object."

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

How is it allocated, when it is in a free-list ? And how is returning a block of memory to free list _not_ the same as deallocating that block ? How is slab allocation different from storage allocation

Ответы на вопрос(3)

Ваш ответ на вопрос