Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО от Тихомирова / МЕТОД РУКОВ-ВО Лаб раб СПО 2013 26-05-13.doc
Скачиваний:
47
Добавлен:
08.06.2015
Размер:
754.18 Кб
Скачать

VirtualAlloc (null, 100*1024, mem_reserve | mem_commit, page_readwrite);

Параметр MEM_TOP_DOWN указывает системе на необходимость резервирования региона в верхних адресах виртуального адресного пространства с целью уменьшения фрагментации виртуальной памяти.

Последний параметр определяет атрибут защиты.

  1. Для возврата физической памяти, спроецированной на регион, или освобождения всего региона адресного пространства используется функция

BOOL VirtualFree( LPVOID lpAddress, // адрес региона

DWORD dwSize, // размер региона

DWORD dwFreeType // тип операции освобождения

);

В простейшем случае использования этой функции – для освобождения всей переданной региону физической памяти – в параметр lpAddress необходимо передать базовый адрес региона, в параметр dwSize=0, так как системе известен размер региона. В третьем параметре следует передать MEM_RELEASE – это приведет к возврату системе всей физической памяти, спроецированной на регион, и освобождению самого региона.

1.3 Кучи

Процессу разрешено создавать несколько куч, являющихся частью его адресного пространства.

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

Одна куча предоставляется процессу по умолчанию. Ее описатель возвращает функция HANDLE GetProcessHeap (VOID);

Дополнительные кучи создаются вызовом функции

HANDLE HeapCreate(DWORD flOptions, // флаг операции

DWORD dwInitialSize, // начальный размер кучи

DWORD dwMaximumSize // максимальный размер кучи

);

Первый параметр определяет характер операций, выполняемых над кучей. По умолчанию (значение 0) действует принцип последовательного доступа к куче (как к критическому участку).

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

Третий параметр указывает максимальный размер кучи. Может быть равен 0 - в этом случае система резервирует регион, самостоятельно определяя его размер и при необходимости расширяет его до максимально возможного объема.

Выделение блока памяти из кучи выполняет функция

LPVOID HeapAlloc(

HANDLE hHeap, // описатель блока

DWORD dwFlags, // флаги управления доступом

DWORD dwBytes // количество размещаемых байтов

);

Первый параметр - описатель кучи, возвращаемый функциями GetProcessHeap() или HeapCreate()

Второй параметр указывает на характер выделения памяти. При его значении, равным HEAP_ZERO_MEMORY = 8, выделяемый блок заполняется нулями.

Третий параметр определяет число выделяемых в куче байт.

Освобождение блока памяти выполняет функция

BOOL HeapFree(

HANDLE hHeap, // handle to the heap

DWORD dwFlags, // heap freeing flags

LPVOID lpMem // pointer to the memory to free

);

Уничтожение кучи выполняет функция

BOOL HeapDestroy(HANDLE hHeap);

Цель работы: практическое знакомство с третьим способом управления виртуальной памятью – отображением файлов в виртуальное адресное пространство процесса.