Управление памятью. Глобальная память, страница 2

+   Запрашивать информацию о страницах виртуальной памяти.

*   Изменять защиту доступа для выделенных страниц виртуальной памяти.

Поскольку виртуальная память распределяется постранично, ее невыгодно использовать для хранения небольших объектов памяти. В среде Win32 предусмотрен лучший способ распределения небольших объемов памяти — функция HeapAlloc.

Функция

Назначение

AllocateUserPhysicalPages

Распределяет страницы физической памяти для использования в адресных расширениях работы с окнами (AWE — Address Windowing Extension)

CopyMemory

Копирует блок памяти из одного места в другое

FillMemory

Заполняет блок памяти указанным значением

FreeUserPhysicalPages

Освобождает страницы физической памяти, которые были ранее распределены с применением функции AllocateUserPhysicalPages

GlobalAlloc

Распределяет блок памяти в глобальной куче

GlobalDiscard

Удаляет блок памяти из глобальной кучи

GlobalFlags

Определяет, блокирован ли блок памяти в глобальной куче, отброшен или может быть отброшен

GlobalFree

Освобождает блок памяти, распределенный в глобальной куче

GlobalHandle

Возвращает дескриптор глобального блока памяти, если дан адрес этого блока

GlobalLock

Блокирует распределенный блок памяти в глобальной куче

GlobalMemoryStatus

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

Куча

Функции кучи позволяют процессу создавать приватную кучу — блок из одной или нескольких страниц в адресном пространстве процесса. Функция HeapCreate создает кучу указанного размера, а функции НеарАНос и HeapFree распределяют и освобождают память в куче. Не существует разницы между памятью, распределенной из приватной кучи, и памятью, распределенной с использованием функции GlobalAlloc.

Объекты кучи могут расти динамически в пределах диапазона, указанного при вызове функции HeapCreate. Максимальный размер кучи определяет число зарезервированных страниц памяти. Начальный размер определяет число выделенных страниц, предназначенных для чтения/записи, которые были первоначально выделены для кучи. Дополнительные страницы автоматически выделяются из зарезервироранного пространства, если запросы функции НеарАНос превышают текущий объем выделенных страниц. Выделение страниц не отменяется до тех пор, пока процесс не закончит свою работу или куча не будет уничтожена с помощью функции HeapDestroy. Поскольку память, распределенная в куче с помощью функции НеарАНос, является неподвижной и система не может уплотнить кучу, приложение должно быть написано так, чтобы фрагментация кучи была минимальной.

Память в приватной куче доступна только для процесса, создавшего кучу. Если приватную кучу создает динамически загружаемая библиотека (DLL — dynamic link library), эта куча создается в адресном пространстве и доступна только процессу, который вызвал DLL.

Описание функций управления памятью

В табл. 11.1 приведены функции управления памятью. За таблицей следует подробное описание функций.

Таблица 11.1. Функции управления памятью ____   ______