Реферат: Распределение памяти
блок приобретает следующий вид:
┌────────┬────────┬─────────┬────────┬──────────────────────┐
│ Занято │ Занято │ ... │ Занято │ Свободно │
└────────┴────────┴─────────┴────────┴──────────────────────┘
Заметим, что размеры занятых областей могут быть
разными. В некоторый момент будет вызвана FREEAREA, чтобы
освободить одну из использованных областей, вообще говоря, не
последнюю. После нескольких вызовов GETAREA и FREEAREA блок
может выглядеть так:
┌────────┬────────┬──────────┬─────────┬────────┬──────────┐
│ Занято │ Занято │ Свободно │ ... │ Занято │ Свободно │
└────────┴────────┴──────────┴─────────┴────────┴──────────┘
где по-прежнему размеры областей различны. Система должна
помнить расположение всех свободных областей, с тем чтобы они
могли быть снова использованы. Более того, смежные свободные
области следует сливать в одну свободную область так, чтобы
память не оказалась разбитой на области, слишком малые для
использования.
Описываемый нами метод помеченных границ принадлежит
Кнуту. Метод требует резервирования для системных нужд 2-х
ячеек на границах каждой области ( одной в начале и одной в
конце ). Это приемлемая плата, так как в случаях, в которых
применяется этот метод, требуются довольно большие области,
например области данных процедур и память для массивов.
Преимущество этого метода в том, что необходимо по существу
фиксированное время, чтобы освободить область и объединить ее
со смежными свободными областями, если это возможно. В других
методах для этой цели требуется просмотр некоторого списка.
Ниже приводится формат каждой занятой и свободной области.