![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
куча заголовок |
//////////////////////////// |
Каждая структура списка свободных блоков имеет следующий формат.
- максимальный размер блока (это число 20h, 80h, 200h и FFFFFFFFh).
- структура, представляющая собой арену, то есть заголовок.
Длина блока в арене 0, а указатель типа next указывает на первый свободный блок данного размера в куче, то есть указывает на первый свободный блок.
В заголовке кучи кроме того находится указатель на следующую кучу, созданную функцией HeapCreate(…). Если следующей кучи нет, то 0. В заголовке кучи имеется поле флагов.
В заголовке содержится критическая секция CriticalSection. Это структура, которая организует последовательный доступ к куче различных потоков процесса.
Несколько потоков обращаются к куче для того, чтобы выделить блок памяти в куче. Процесс выделения памяти в куче состоит из следующих этапов.
1. Поиск свободного блока.
2. Выделение физической памяти для этого блока.
3. Запись информации в выделенный блок.
Первый поток выполнил два этапа, его квант времени истёк. Начинается выполнение программного кода второго потока. Второй поток выполняет три этапа и находит тот же блок. Когда управление вернётся к первому потоку, то он запишет информацию в тот же блок, то есть информация второго потока будет испорчена.
Чтобы этого избежать существует критическая секция. Это признак. Как только какой-либо поток начинает работу с кучей устанавливается признак в CriticalSection.
Недостатком кучи является снижение производительности из-за последовательного доступа.
Heap_No_Serialsize – куча допускает одновременный доступ к куче со стороны нескольких потоков. Его рекомендуется не использовать, а если использовать, то только в том случае, если процесс имеет один поток.
В заголовке кучи обычно указывается сигнатура “HI” – признак того, что это заголовок кучи. Рассмотрим структуру отдельных блоков кучи. Каждый блок начинается с заголовка, то есть с арены.
Дата публикования: 2014-11-03; Прочитано: 563 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!