VirtualFree

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

Для того, чтобы освободить страницу памяти в виртуальном адресном пространнстве другого, выделенную при помощи функции VirtualAllocEx процесса необходимо произвести вызов функции VirtualFreeEx.

function VirtualFree(
  lpAddress: Pointer;  // начальный адрес освобожаемого региона памяти
  dwSize: DWORD;       // размер освобождаемого региона памяти
  dwFreeType: DWORD    // способ освобождения
): BOOL; stdcall;

Параметры

lpAddress [in]
Указатель на начальный базовый адрес, начиная с которого будет происходить освобождение памяти. Если параметр dwFreeType содержит флаг MEM_RELEASE, то это значение должно быть возвращено функцией VirtualAlloc при резервировании памяти.

dwSize [in]
Указывает размер освобождаемого региона в байтах. Если параметр dwFreeType содержит флаг MEM_RELEASE, то значение этого параметра необходимо установить в нуль. В противном случае будет снята физическая память со всех страниц региона памяти, которые полностью либо частично содержаться внутри диапазона от lpAddress до lpAddress + dwSize. В этом случае возможно освобождение двух страниц, память на которых будет использована не полностью (в начале и в конце).

dwFreeType [in]
Указывает способ освобождения памяти. Указанный параметр может быть комбинацией следующих флагов:

Флаг Назначение

MEM_DECOMMIT

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

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

MEM_RELEASE

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

Возвращаемое значение

С случае удачного завершения функция возвращает True.

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

Описание

Функция VirtualFree позволяет выполнять следующие операции:

  • Снимать физическую память с диапазона, занимаемого зарезервированными страницами как с переданной физической памятью, так и без нее.
  • Снимать резервирование с региона памяти.
  • Выполнять комбинацию предыдущих двух пунктов.
  • Освобождаемые страницы должны быть ранее выделены при помощи вызова функции VirtualAlloc. Попытка чтения/записи по диапазону адресов, на которых находятся освобожденные страницы приведет к исключению нарушения доступа.

    Фунция VirtualFree может успешно снимать физическую память с тех страниц, которые не имеют под собой физической памяти. Это дает возможность снимать физическую память с целого региона страниц не заботясь о том, какие из страниц этого региона имеют под вобой физическую память, а какие ее не имеют. После снятия памяти содержимое страницы ниде более не сохраняется - ни в опреативной памяти, ни в файле подкачки. Если было произведено снятие физической памяти, но не было снятие резервирования, то страница остается зарезервированной и можно опять передать ей физическую память вызовом VirtualAlloc. Попытка чтения/записи по адресам занимаемыми зарезервированными страницами, которые не имеют под собой физической памяти, приводит к исключению нарушения доступа (access violation).

    Текущее состояние каждой страницы должно быть совместимо со способом освобождения, который указывается в параметре dwFreeType. Если это не выполнятеся, то никакого освобождения памяти не происходит и функция заканчивается неудачей.

    Требования

    Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия
    Windows 95/98: Требуется Windows 95 или более поздняя версия
    Бибиотека: Kernel32.dll
    Подключаемый модуль: Windows

    Смотри также:

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

    © Mystic, 2002