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

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

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

    Для того, чтобы указать, что данные в некотором диапазоне памяти долгое время не будут представлять для вас интереса, следует вызвать функция VirtualAlloc, передав ей в качестве одного из параметров флаг MEM_RESET. В этом случае указанные страницы при первом же удобном случае будут перещены в файл подкачки. Тем не менее, блок памяти можно будет использовать в дальнейшем.

    НазадВыделение виртуальной памяти Работа со страницамиВперед

    © Mystic, 2002