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

VirtualAlloc                              • Windows 98   • Windows 2000

Описание

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

Синтаксис

LPVOID VirtualAlloc( LPVOID IpvAddress, DWORD dwSize, DWORD dwAllocationType, DWORD dwProtect )

Параметры

IpvAddress

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

ArStat

DWORD. Размер области памяти в байтах. Если параметр IpvAddress равен NULL, это значение округляется в большую сторону до границы следующей страницы. В ином случае распределенные страницы включают все страницы, содержащие один или несколько байтов в диапазоне от IpvAddress до (IpvAddress + dwSize).

dwAOt***fwc

DWORD. Тип выполняемого распределения. В приложении может быть указано любое сочетание флажков, перечисленных в табл. 11.11.

Таблица 11.11. Значения параметра dwAllocationType функции VirtualAlloc

Флажок

Описание

МЕМ_СОММ1Т

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

MEM_RESERVE

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

MEM_RESET

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

MEM_TOP_DOWN

Распределить память в области наивысших возможных адресов.

dwProtect

DWORD. Тип защиты доступа для выделенных страниц. С любым из флажков, перечисленных в табл. 11.12, могут быть объединены модификаторы PAGE_GUARD и PAGEJNOCACHE.

Таблица 1 1- 12. Значения параметра dwProtect функции VirtualAlloc

Флажок

Описание

PAGE_EXECUTE

Обеспечить доступ для выполнения к выделенной области страниц. Любая попытка читать или писать данные в выделенной области вызывает нарушение правил доступа.

PAGE_EXECUTE_READ

Обеспечить доступ для выполнения и чтения к выделенной области страниц. Любая попытка писать данные в выделенной области вызывает нарушение правил доступа.

PAGE_EXECUTE_READWRITE

Обеспечить доступ для выполнения, чтения и записи к выделенной области страниц.

PAGE_EXECUTE_WRITECOPY

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

PAGE_GUARD

Страницы в указанной области становятся охраняемыми. Любая попытка чтения с охраняемой страницы или записи на охраняемой странице заставляют систему активизировать исключение STATUS GUARD PAGE и выключить состояние охраняемой страницы. Этот флажок не может использоваться с флажком PAGE_NOACCESS.

PAGE_NOA6€tSS

Запретить весь доступ к выделенной области страниц. Любая попытка обратиться к выделенной области вызывает нарушение общей защиты (GP — general protection).

PAGE_NOCACHE

Не допускать кэширования выделенных областей страниц. Этот флажок не рекомендован для общего использования. Он не может использоваться вместе с флажком PAGE NOACCESS.

PAGE_READONLY

Обеспечить доступ для чтения к выделенной области страниц. Любая попытка писать в выделенной области вызывает нарушение правил доступа. Если система проводит различие между доступом только для чтения и доступом для выполнения, то попытки выполнить код в выделенной области вызовет нарушение правил доступа.

PAGE_READWRITE

Обеспечить доступ для чтения и записи к выделенной области страниц.

PAGE_WRITECOPY

Обеспечить доступ с копированием после записи к выделенной области страниц.

PAGE_WRITECOMWNE

Обеспечить объединение записи. Этот флажок в основном используется с буферной памятью страничных блоков.

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

LPVOID. В случае успешного выполнения базовый адрес распределенной области страниц; в ином случае' воз вращаемое значение — NULL.

Включаемый файл

winbase.h

См. также

VirtualFree, VirtualLock, VirtualAllocEx