TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Гостевая книга

Благодарности

От автора

 

 

 

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

Это служебная подпрограмма, которая обеспечивает взаимодействие пользовательской программы с кучей. Администратор кучи обрабатывает запросы процедур NEW, GETMEM. DISPOSE, FREEMEM и др. и изменяет значения указателей HEAPPTR и FREEUST.tmp210-4.jpg

Младшие адреса

Указатель HEAPPTR содержит адрес нижней границы свободной части кучи (см. рисунок), а указатечь FREELIST - адрес описателя первого свободного блока. Описатель свободного блока — это запись, которая имеет 2 поля: в первом указан размер текущего свободного блока, во втором - адрес следующего свободного блока. Если куча не фрагментирована. т. е. нет чередования блоков : свободный, занятый, свободный и т. д., то адрес первого свободного блока содержится в указателе HEAPPTR. В каждом свободном блоке (в начале блока) содержится описатель этого блока, он занимает 8байт.

При очередном обращении к процедурам NEW или GETMEM администратор ищет в куче подходящий по размеру минимальный свободный блок. Администратор выделяет память блоками, размер которых коатен 8 байтам. Если свободный блок опять полностью занимается, то описатель блока удаляется из этого блока.

Поэтому, если программа запрашивает 1,2,3....,8 байт, то выделяется 8байт; если 9,10,..., 16 -то выделяется 16байт и т.д. То есть, если запрашиваемый размер не кратен 8 байчам, то в куче образуется "дырка" размером от 1 до 7 байт, причем она не может использоваться ни при каком другом запросе динамической памяти вплоть до того момента, когда связанная с ней переменная не будет удалена из кучи.

 

На первую страницу

 

Rambler's Top100 PROext: Top 1000 Rambler's Top100
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz