Динамическое распределение памяти в MS Windows. Габрельян Б.В. - 14 стр.

UptoLike

Составители: 

lpAddress - стартовый адрес захватываемого или резервируемого блока. При
резервировании блока, указанный адрес выравнивается на 64-килобайтную
границу. Если распределяется память из прежде уже зарезервированного диапазона
адресов, проводится выравнивание на границу страницы памяти. Если значение
параметра NULL, адрес начала блока определяется ОС.
dwSize - размер блока в байтах. Реально выделяется память под целое число
страниц
. Если значение параметра lpAddress равно NULL, то dwSize плюс все байты
до следующей страницы. Иначе, все страницы, содержащие адреса от lpAddress до
(lpAddress+dwSize). Т.е. если, например, захватываем блок размером в страницу, но
сос стартовым адресом смещенным от границы страницы на два байта, то реально
будут захвачены две страницы.
flAllocationType
- тип распределения. Могут указываться следующие флаги (или их
комбинации):
Флаг Значение
MEM_COMMIT
Захватывает нужное число страниц в физической памяти или в
файле подкачки. Попытка захватить уже захваченную прежде
страницу не приводит к ошибке.
MEM_RESERVE
Резервирует указанный диапазон в адресном пространстве
процесса не проводя реального захвата (распределения)
физической памяти. Этот диапазон не
может использоваться
другими операциями распределения (функции LocalAlloc,
GlobalAlloc и т.п.) до тех пор, пока не будет захвачен
последующими вызовами VirtualAlloc.
MEM_RESET
только Windows NT: Указывает, что страницы памяти из
диапазона от lpAddress до lpAddress +dwSize не будут читаться
или записываться в файл подкачки. Фдаг MEM_RESET
декларирует, что соделжимое страниц более не существенно и ОС
может перезаписывать их
содержимое.
MEM_TOP_DOWN Распределяет память по наибольшим доступным адресам.
flProtect - указывает тип защиты доступа к блоку. Если память захватывается,
могут быть указаны следующие флаги (если нужно, то совместно с флагами
PAGE_GUARD и PAGE_NOCACHE):
Флаг Значение
PAGE_READONLY
Доступ к распределенным страницам только для
чтения. Генерируется исключение "запрет доступа"
при попытке записи или выполнения страниц блока
.
PAGE_READWRITE Доступ на чтение и запись.
PAGE_EXECUTE
Разрешает доступ на запуск из адресов,
принадлежащих страницам блока. Попытка чтения
или записи в страницы блока приводит к
исключению "запрет доступа".
PAGE_EXECUTE_READ
Позволяет использовать страницы только для
запуска и чтения.
PAGE_EXECUTE_READWRITE
Позволяет запускать, читать и записывать в
страницы блока.
PAGE_GUARD Попытка записи или чтения для таких
страниц
lpAddress - стартовый адрес захватываемого или резервируемого блока. При
резервировании блока, указанный адрес выравнивается на 64-килобайтную
границу. Если распределяется память из прежде уже зарезервированного диапазона
адресов, проводится выравнивание на границу страницы памяти. Если значение
параметра NULL, адрес начала блока определяется ОС.
dwSize - размер блока в байтах. Реально выделяется память под целое число
страниц. Если значение параметра lpAddress равно NULL, то dwSize плюс все байты
до следующей страницы. Иначе, все страницы, содержащие адреса от lpAddress до
(lpAddress+dwSize). Т.е. если, например, захватываем блок размером в страницу, но
сос стартовым адресом смещенным от границы страницы на два байта, то реально
будут захвачены две страницы.
flAllocationType - тип распределения. Могут указываться следующие флаги (или их
комбинации):
        Флаг                                     Значение
                      Захватывает нужное число страниц в физической памяти или в
MEM_COMMIT            файле подкачки. Попытка захватить уже захваченную прежде
                      страницу не приводит к ошибке.
                      Резервирует указанный диапазон в адресном пространстве
                      процесса не проводя реального захвата (распределения)
                      физической памяти. Этот диапазон не может использоваться
MEM_RESERVE
                      другими операциями распределения (функции LocalAlloc,
                      GlobalAlloc и т.п.) до тех пор, пока не будет захвачен
                      последующими вызовами VirtualAlloc.
                      только Windows NT: Указывает, что страницы памяти из
                      диапазона от lpAddress до lpAddress +dwSize не будут читаться
MEM_RESET             или записываться в файл подкачки. Фдаг MEM_RESET
                      декларирует, что соделжимое страниц более не существенно и ОС
                      может перезаписывать их содержимое.
MEM_TOP_DOWN Распределяет память по наибольшим доступным адресам.
flProtect - указывает тип защиты доступа к блоку. Если память захватывается,
могут быть указаны следующие флаги (если нужно, то совместно с флагами
PAGE_GUARD и PAGE_NOCACHE):
               Флаг                                     Значение
                                   Доступ к распределенным страницам только для
PAGE_READONLY                      чтения. Генерируется исключение "запрет доступа"
                                   при попытке записи или выполнения страниц блока.
PAGE_READWRITE                     Доступ на чтение и запись.
                                   Разрешает доступ на запуск из адресов,
                                   принадлежащих страницам блока. Попытка чтения
PAGE_EXECUTE
                                   или записи в страницы блока приводит к
                                   исключению "запрет доступа".
                                   Позволяет использовать страницы только для
PAGE_EXECUTE_READ
                                   запуска и чтения.
                                   Позволяет запускать, читать и записывать в
PAGE_EXECUTE_READWRITE
                                   страницы блока.
PAGE_GUARD                         Попытка записи или чтения для таких страниц