Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Администратор кучи



Администратор кучи – служебная программа, которая автоматически пристыковывается к программе пользователя во время компоновки и управляет взаимодействием программы пользователя с кучей. Администратор кучи обрабатывает запросы на выделение и освобождение памяти, определение размера свободной памяти и т.п, используя для этого стандартные указатели, которые определены в модуле SYSTEM Turbo Pascal (рис. 42):

HeapOrg – указатель на начало кучи,

HeapEnd – указатель на верхнюю границу кучи,

HeapPtr – указатель на нижнюю границу свободного пространства

кучи,

FreeList – указатель на список свободных участков кучи.


Рис. 42. Распределение области памяти кучи

Каждый свободный блок описывается дескриптором, имеющим следующую структуру:

Type PFreeRec = ^ TFreeRec;

TFreeRec = record

next: pointer;

size: pointer

end;

Var FreeList: PFreeRec;

Т.о., указатель FreeList указывает на дескриптор первого свободного блока в куче. Данная списочная структура предназначена для описания всех свободных блоков памяти, которые расположены ниже границы HeapPtr. Происхождение блоков связано со случайной последовательностью запросов на выделение / освобождение памяти в процессе выполнения программы. Поле next в записи TFreeRec указывает на дескриптор следующего по списку свободного блока кучи или содержит адрес, совпадающий с HeapEnd, если этот участок последний в списке. Поле size содержит размер свободного блока (в байтах), представленный в ненормализованном виде, или 0, если ниже адреса, содержащегося в HeapPtr, нет свободных блоков. Ненормализованная длина определяется так: в старшем слове поля size содержится число свободных параграфов, т.е. участков размером 16 байт, а в младшем слове - число байт в диапазоне 0..15.

Сразу после загрузки программы указатели HeapPtr и FreeList содержат один и тот же адрес, который совпадает с началом кучи и находится в HeapOrg. При этом в первых восьми байтах кучи хранится запись, соответствующая типу TFreeRec (поле next содержит адрес, совпадающий со значением HeapEnd, а поле size – нулевое значение) (рис. 43).


Рис. 43. Распределение области памяти кучи после загрузки программы

После выполнения серии запросов на выделение памяти область кучи будет распределена следующим образом (рис. 44):






Дата публикования: 2014-11-26; Прочитано: 525 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...