Функция 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) или одному из следующих значений.

Значение Значение
MEM_RESERVE
0x00002000
Сопоставляет зарезервированное представление.
MEM_REPLACE_PLACEHOLDER
0x00004000
Заменяет заполнитель сопоставленным представлением. Поддерживаются только представления разделов на основе данных и pf (без изображений, физической памяти и т. д.). При замене заполнителя BaseAddress и ViewSize должны точно соответствовать значениям заполнителя, а любая предоставленная MEM_ADDRESS_REQUIREMENTS структура должна состоять из всех нулей.

После замены заполнителя сопоставленным представлением, чтобы освободить это сопоставленное представление обратно с заполнителем, см. параметры UnmapFlagsunmapViewOfFileEx и UnmapViewOfFile2.

Заполнитель — это тип области зарезервированной памяти.

Требования к выравниванию в 64 кб для Offset и BaseAddress не применяются, если указан этот флаг.

MEM_LARGE_PAGES
0x20000000
Сопоставляет большое представление страницы. Этот флаг указывает, что представление должно быть сопоставлено с помощью поддержки больших страниц. Размер представления должен быть кратным размеру большой страницы, сообщаемой функцией 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

См. также

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2