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) 或以下值之一。
值 | 含义 |
---|---|
|
映射保留视图。 |
|
将占位符替换为映射视图。 仅支持数据/pf 支持的分区视图, (无图像、物理内存等 ) 。 替换占位符时, BaseAddress 和 ViewSize 必须与占位符完全匹配,并且提供的任何 MEM_ADDRESS_REQUIREMENTS 结构都必须包含所有零。
将占位符替换为映射视图后,若要将该映射视图释放回占位符,请参阅 UnmapViewOfFileEx 和 UnmapViewOfFile2 的 UnmapFlags 参数。 占位符是一种保留内存区域。 指定此标志时, Offset 和 BaseAddress 上的 64k 对齐要求不适用。 |
|
映射大型页面视图。 此标志指定应使用 大型页面支持映射视图。 视图的大小必须是 GetLargePageMinimum 函数报告的大型页面大小的倍数,并且文件映射对象必须已使用 SEC_LARGE_PAGES 选项创建。 如果为 BaseAddress 参数提供非 null 值,则该值必须是 GetLargePageMinimum 的倍数。 |
[in] PageProtection
所需的页面保护。
对于使用 SEC_IMAGE 属性创建的文件映射对象, PageProtection 参数不起作用,应设置为任何有效值,例如 PAGE_READONLY。
[in, out, optional] ExtendedParameters
指向 MEM_EXTENDED_PARAMETER 类型的一个或多个扩展参数的可选指针。 每个扩展参数值本身都可以具有 MemExtendedParameterAddressRequirements 或 MemExtendedParameterNumaNode的 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 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈