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 |
||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.