mapViewOfFile3 函数 (memoryapi.h)

将文件视图或页面文件支持的节映射到指定进程的地址空间中。

使用此函数,可以:对于新的分配,指定虚拟地址空间的范围和 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

节将映射到的进程句

[in, optional] BaseAddress

视图的所需基址。 地址向下舍入到最近的 64k 边界。

注意

如果此参数为 NULL,则系统选取基址。

如果 BaseAddress 不为 NULL,则提供 的任何MEM_ADDRESS_REQUIREMENTS 都必须包含所有零。

[in] Offset

部分开头的偏移量。 这必须是 64k 对齐的。

[in] ViewSize

要映射的字节数。 值为零 (0) 指定映射整个部分。

大小必须始终是页面大小的倍数。

[in] AllocationType

内存分配的类型。 此参数可以是零 (0) 或以下值之一。

含义
MEM_RESERVE
0x00002000
映射保留视图。
MEM_REPLACE_PLACEHOLDER
0x00004000
将占位符替换为映射视图。 仅支持数据/pf 支持的分区视图, (无图像、物理内存等 ) 。 替换占位符时, BaseAddressViewSize 必须与占位符完全匹配,并且提供的任何 MEM_ADDRESS_REQUIREMENTS 结构都必须包含所有零。

将占位符替换为映射视图后,若要将该映射视图释放回占位符,请参阅 UnmapViewOfFileExUnmapViewOfFile2 的 UnmapFlags 参数。

占位符是一种保留内存区域。

指定此标志时, OffsetBaseAddress 上的 64k 对齐要求不适用。

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 类型的一个或多个扩展参数的可选指针。 每个扩展参数值本身都可以具有 MemExtendedParameterAddressRequirementsMemExtendedParameterNumaNode的 Type 字段。 如果未提供 MemExtendedParameterNumaNode 扩展参数,则行为与 VirtualAlloc/MapViewOfFile 函数的行为相同 (也就是说,物理页的首选 NUMA 节点是根据首次访问内存) 线程的理想处理器确定的。

[in] ParameterCount

ExtendedParameters 指向的扩展参数数。

返回值

如果成功,则返回映射视图的基址。 否则,返回 NULL ,并使用 GetLastError 提供扩展错误状态。

注解

此 API 有助于支持高性能游戏和服务器应用程序,这些游戏和服务器应用程序在管理虚拟地址空间方面有特定要求。 例如,在以前保留的区域上映射内存;这对于实现自动环绕环形缓冲区很有用。 分配具有特定对齐方式的内存;例如,使应用程序能够按需提交大型/大型页面映射区域。

示例

有关代码示例,请参阅 VirtualAlloc2 中的方案 1。

要求

要求
最低受支持的客户端 Windows 10版本 1803 [仅限桌面应用]
最低受支持的服务器 Windows Server 2016 [仅限桌面应用]
目标平台 Windows
标头 memoryapi.h (包括 Windows.h)
Library onecore.lib
DLL Kernel32.dll

另请参阅

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2