MapViewOfFile3 函数 (memoryapi.h)
将文件或页文件支持的分区视图映射到指定进程的地址空间。
语法
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
视图的所需基址(地址向下舍入到最近的 64k 边界)。
如果此参数 NULL,则系统会选取基址。
如果 BaseAddress 未 NULL,则提供的任何 MEM_ADDRESS_REQUIREMENTS 都必须包含所有零。
[in] Offset
节开头的偏移量。
在 AllocationType 中使用MEM_LARGE_PAGES时,偏移量必须对齐 64k 或与 GetLargePageMinimum 对齐。 此外,当在 AllocationType 中使用MEM_REPLACE_PLACEHOLDER时,偏移量必须与 VirtualAlloc2 授予的基础页面大小对齐。
[in] ViewSize
要映射的字节数。 值为零(0)指定要映射整个节。
大小必须始终为页面大小的倍数。
[in] AllocationType
内存分配的类型。 此参数可以是零(0)或以下值之一。
价值 | 意义 |
---|---|
|
映射保留视图。 |
|
将占位符替换为映射视图。 仅支持数据/pf 支持的分区视图(无图像、物理内存等)。 替换占位符时,BaseAddress 和 ViewSize 必须与占位符的占位符完全匹配,并且提供的任何 MEM_ADDRESS_REQUIREMENTS 结构都必须包含所有零。
将占位符替换为映射视图后,若要将映射视图释放回占位符,请参阅 UnmapViewOfFileEx 的 UnmapFlags 参数,并 UnmapViewOfFile2。 占位符是保留内存区域的类型。 指定此标志时,Offset 和 BaseAddress 的 64k 对齐要求不适用。 |
|
映射大型页面视图。 此标志指定应使用 大页面支持映射视图。 视图的大小必须是 GetLargePageMinimum 函数报告的大型页面大小的倍数,并且必须使用 SEC_LARGE_PAGES 选项创建文件映射对象。 如果为 BaseAddress 参数提供非 null 值,则该值必须是 GetLargePageMinimum的倍数。
指定此标志时,Offset 的 64k 对齐要求不适用。 |
[in] PageProtection
所需的页面保护。
对于使用 SEC_IMAGE 属性创建的文件映射对象,PageProtection 参数无效,应设置为任何有效值,如 PAGE_READONLY。
[in, out, optional] ExtendedParameters
指向 MEM_EXTENDED_PARAMETER类型的一个或多个扩展参数的可选指针。 每个扩展参数值本身都可以具有 Type 字段,MemExtendedParameterAddressRequirements 或 MemExtendedParameterNumaNode。 如果未提供 MemExtendedParameterNumaNode 扩展参数,则行为与 VirtualAlloc/MapViewOfFile 函数(即,物理页的首选 NUMA 节点)是根据首次访问内存的线程的理想处理器确定的。
[in] ParameterCount
ExtendedParameters指向的扩展参数数。
返回值
如果成功,则返回映射视图的基址。 否则,使用 getLastError
言论
此 API 有助于支持高性能游戏和服务器应用程序,这些应用程序在管理虚拟地址空间方面有特定要求。 例如,将内存映射在以前保留的区域之上;这可用于实现自动包装环缓冲区。 分配具有特定对齐方式的内存;例如,若要使应用程序能够按需提交大型/巨大的页面映射区域。
将此函数用于新分配,可以:
- 指定虚拟地址空间的范围和 2 的对齐限制
- 指定任意数量的扩展参数
- 将物理内存的首选 NUMA 节点指定为扩展参数
- 指定占位符操作(具体而言,替换)。
若要指定 NUMA 节点,请参阅 ExtendedParameters 参数。
例子
有关代码示例,请参阅 virtualAlloc2
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 版本 1803 [仅限桌面应用] |
支持的最低服务器 | Windows Server 2016 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | memoryapi.h (包括 Windows.h) |
库 | onecore.lib |
DLL | Kernel32.dll |