TURBO PASCAL |
Новости
|
Администратор КучиЭто служебная подпрограмма, которая обеспечивает взаимодействие пользовательской программы с кучей. Администратор кучи обрабатывает запросы процедур NEW, GETMEM. DISPOSE, FREEMEM и др. и изменяет значения указателей HEAPPTR и FREEUST. Младшие адреса Указатель HEAPPTR содержит адрес нижней границы свободной части кучи (см. рисунок), а указатечь FREELIST - адрес описателя первого свободного блока. Описатель свободного блока — это запись, которая имеет 2 поля: в первом указан размер текущего свободного блока, во втором - адрес следующего свободного блока. Если куча не фрагментирована. т. е. нет чередования блоков : свободный, занятый, свободный и т. д., то адрес первого свободного блока содержится в указателе HEAPPTR. В каждом свободном блоке (в начале блока) содержится описатель этого блока, он занимает 8байт. При очередном обращении к процедурам NEW или GETMEM администратор ищет в куче подходящий по размеру минимальный свободный блок. Администратор выделяет память блоками, размер которых коатен 8 байтам. Если свободный блок опять полностью занимается, то описатель блока удаляется из этого блока. Поэтому, если программа запрашивает 1,2,3....,8 байт, то выделяется 8байт; если 9,10,..., 16 -то выделяется 16байт и т.д. То есть, если запрашиваемый размер не кратен 8 байчам, то в куче образуется "дырка" размером от 1 до 7 байт, причем она не может использоваться ни при каком другом запросе динамической памяти вплоть до того момента, когда связанная с ней переменная не будет удалена из кучи. |
На первую страницу
(с)Все права защищеныПо всем интересующим вопросам прошу писать на электронный адрес |