русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 703; Нарушение авторских прав


Рассмотрим функции работы с кучей.

Структура арены.

Арена в занятых блоках. Начинается с поля длины блока. Затем в некоторых версиях Windows кроме длины блока могут указываться значения счётчика команд перед обращением к куче.

Арена в свободных блоках.

SIZE – размер

PREV – указатель на пустой свободный блок.

NEXT – указатель на следующий свободный блок, то есть свободные блоки связаны в цепочки.

Поле SIZE используется и в занятых и в свободных блоках. минимальный блок памяти, который можно выделить в куче – 4 байт, следовательно 2 младших бита в поле размер используются для служебных целей.

0100

признак свободен блок или нет

признак свободен ли предыдущий блок (0 – свободен, 1 – занят)

Это нужно чтобы уменьшить фрагментацию. Когда выделенный блок памяти в куче, то выде-ляется ещё около 10h байт, необходимый для создания арены.

GetProcessHeap(…) – получить дескриптор кучи, предоставляемый процессу по умолчанию. Эта функция находит PDB и извлекает из базы данных дескриптор кучи.

HeapCreate(…) – создание кучи. Вызывают не только приложения пользователя, но и kernel32.dll и user32.dll вызывает для создания системных структур данных, например PDB или базы данных потока (TDB).

Процесс создания кучи проходит в 2 этапа:

1. резервирование памяти для кучи и связывание кучи в списке куч процесса.

2. инициализация всех полей заголовка кучи.

Функция HeapCreate(…) проверяет корректность параметров. Округляет границу кучи до ближайшего целого числа кратного 4 Кб.

 
 

 

 


3 кольцо

 
 


0 кольцо

 
 
ntoskrnl.exe – Windows NT,2000 vmm.vxd – Windows 95, 98

 


В кольце 0 выполняется реальная работа с памятью. Если куча принадлежит kernel32.dll, то есть является системной, то в заголовке инициализируется ряд дополнительных полей. Например, чтобы сделать кучу невыгружаемой, если в ней находятся важные для ОС поля.



 

HeapDestroy(…). Проблема состоит в том, что

1. куча должна быть свободной, то есть CriticalSection=0.

2. куча может иметь подкучи.

 
 

 


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

 



<== предыдущая лекция | следующая лекция ==>
Особенности кучи в Windows 95, Windows NT. | Дополнительные кучи Win32 процесса.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.