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

Удаление кучи



HeapDestroy(…). Проблема состоит в том, что 1.куча должна быть свободной, то есть CriticalSection=0. 2. куча может иметь подкучи.

Необходимо удалить весь список связанных подкуч. Windows поддерживает связанный список кучи, то есть HeapDestroy(…) должна выполнять действия по корректировке списка.

Выделение блока памяти в определённой куче.

HeapAlloc(…). Этот процесс состоит из следующих этапов.

1. проверки параметров функции HeapAlloc(…).

2. захват CriticalSection заголовка кучи.

3. выравнивание размера запрошенного блока к ближайшему числу кратному 4 и добавление размера арены. К каждому из 4-х списков относится запрошенный блок. 84 байта, 20h, 80h, 200h.

4. нахождение первого свободного блока в списке. Если блок найден, то функция проверяет насколько этот блок велик, нельзя ли его поделить на 2. Если можно, то создаются 2 блока, настраиваются их арены. Первый блок занят функцией HeapAlloc(…), другой поступает в список свободных блоков.

5. освобождение критической секции. Указатель кучи устанавливается на первый байт следующего за ареной блока. Если функция не найдёт в списке подходящего свободного блока, то kernel32 создаёт подкучу, настраивает её заголовок, вставляет подкучу в список подкуч, а затем функция HeapAlloc(…) возвращается к поиску свободных блоков.

Освобождение блока кучи. HeapFree(…).

1. проверка параметров.

2. захват CriticalSection.

3. если перед освобождаемым блоком уже есть свободный блок, то они сливаются в один.

4. фактическое освобождение блока, возврат его в кучу.

5. освобождение CriticalSection.

10. Куча, предоставляемая процессу по умолчанию, и дополнительные кучи. Назначение дополнительных куч Win32.

Мы рассматривали функции для работы с виртуальной памятью. Для работы с небольшими областями памяти используются кучи.





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



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