Функция MapViewOfFile3 (memoryapi.h)
Сопоставляет представление файла или раздел на основе файла подкачки с адресным пространством указанного процесса.
С помощью этой функции можно: для новых выделений указать диапазон виртуального адресного пространства и ограничение выравнивания power-of-2; указать произвольное число расширенных параметров; укажите предпочтительный узел NUMA для физической памяти в качестве расширенного параметра; и укажите операцию заполнителя (в частности, замену).
Сведения об указании узла NUMA см. в параметре ExtendedParameters .
Синтаксис
PVOID MapViewOfFile3(
[in] HANDLE FileMapping,
[in] HANDLE Process,
[in, optional] PVOID BaseAddress,
[in] ULONG64 Offset,
[in] SIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
[in] ULONG ParameterCount
);
Параметры
[in] FileMapping
Handle для раздела, который должен быть сопоставлен с адресным пространством указанного процесса.
[in] Process
HANDLE для процесса, с которым будет сопоставлен раздел.
[in, optional] BaseAddress
Требуемый базовый адрес представления. Адрес округляется до ближайшей границы в 64 кб.
Примечание
Если этот параметр имеет значение NULL, система выбирает базовый адрес.
Если baseAddress не имеет значение NULL, то все предоставленные MEM_ADDRESS_REQUIREMENTS должны состоять из всех нулей.
[in] Offset
Смещение от начала раздела. Он должен быть выровнен по 64 кб.
[in] ViewSize
Число байтов для сопоставления. Значение, равное нулю (0), указывает, что будет сопоставлен весь раздел.
Размер всегда должен быть кратным размеру страницы.
[in] AllocationType
Тип выделения памяти. Этот параметр может быть равен нулю (0) или одному из следующих значений.
Значение | Значение |
---|---|
|
Сопоставляет зарезервированное представление. |
|
Заменяет заполнитель сопоставленным представлением. Поддерживаются только представления разделов на основе данных и pf (без изображений, физической памяти и т. д.). При замене заполнителя BaseAddress и ViewSize должны точно соответствовать значениям заполнителя, а любая предоставленная MEM_ADDRESS_REQUIREMENTS структура должна состоять из всех нулей.
После замены заполнителя сопоставленным представлением, чтобы освободить это сопоставленное представление обратно с заполнителем, см. параметры UnmapFlagsunmapViewOfFileEx и UnmapViewOfFile2. Заполнитель — это тип области зарезервированной памяти. Требования к выравниванию в 64 кб для Offset и BaseAddress не применяются, если указан этот флаг. |
|
Сопоставляет большое представление страницы. Этот флаг указывает, что представление должно быть сопоставлено с помощью поддержки больших страниц. Размер представления должен быть кратным размеру большой страницы, сообщаемой функцией GetLargePageMinimum , а объект сопоставления файлов должен быть создан с помощью параметра SEC_LARGE_PAGES . Если для параметра BaseAddress указано значение, отличное от NULL, то значение должно быть кратным GetLargePageMinimum. |
[in] PageProtection
Требуемая защита страницы.
Для объектов сопоставления файлов, созданных с помощью атрибута SEC_IMAGE, параметр PageProtection не действует и должен иметь любое допустимое значение, например PAGE_READONLY.
[in, out, optional] ExtendedParameters
Необязательный указатель на один или несколько расширенных параметров типа MEM_EXTENDED_PARAMETER. Каждое из этих значений расширенных параметров может иметь поле Type либо MemExtendedParameterAddressRequirements , либо MemExtendedParameterNumaNode. Если расширенный параметр MemExtendedParameterNumaNode не указан, поведение будет таким же, как и для функцийMapViewOfFileVirtualAlloc/ (то есть предпочтительный узел NUMA для физических страниц определяется на основе идеального процессора потока, который первым обращается к памяти).
[in] ParameterCount
Количество расширенных параметров, на которые указывает ExtendedParameters.
Возвращаемое значение
При успешном выполнении возвращает базовый адрес сопоставленного представления. В противном случае возвращает значение NULL , а расширенное состояние ошибки доступно с помощью GetLastError.
Комментарии
Этот API помогает поддерживать высокопроизводительные игры и серверные приложения, которые предъявляют особые требования к управлению виртуальным адресным пространством. Например, сопоставление памяти поверх ранее зарезервированного региона; это удобно для реализации автоматически упакованного кольцевого буфера. Выделение памяти с определенным выравниванием; например, чтобы позволить приложению фиксировать крупные или огромные сопоставленные страницы регионы по запросу.
Примеры
Пример кода см. в разделе Сценарий 1 в VirtualAlloc2.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10 версии 1803 [только классические приложения] |
Минимальная версия сервера | Windows Server 2016 [только классические приложения] |
Целевая платформа | Windows |
Header | memoryapi.h (включая Windows.h) |
Библиотека | onecore.lib |
DLL | Kernel32.dll |
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по