共用方式為


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) 或下列其中一個值。

價值 意義
MEM_RESERVE
0x00002000
對應保留的檢視。
MEM_REPLACE_PLACEHOLDER
0x00004000
以對應的檢視取代佔位元。 僅支持數據/pf 支援的區段檢視(沒有影像、物理記憶體等)。 當您取代佔位元元時,BaseAddressViewSize 必須完全符合佔位符元的佔位符,而且任何提供的 MEM_ADDRESS_REQUIREMENTS 結構都必須包含所有零。

將佔位符取代為對應檢視之後,若要釋放該對應檢視回到佔位符,請參閱 unmapFlags 參數 UnmapViewOfFileExUnmapViewOfFile2

佔位元是保留的記憶體區域類型。

指定此旗標時,OffsetBaseAddress 上的 64k 對齊需求不適用。

MEM_LARGE_PAGES
0x20000000
對應大型頁面檢視。 此旗標會指定檢視應該使用 大型頁面支援對應。 檢視的大小必須是 GetLargePageMinimum 函式所報告之大型頁面大小的倍數,而且必須使用 SEC_LARGE_PAGES 選項建立檔案對應物件。 如果您為 BaseAddress 參數提供非 Null 值,則此值必須是 getLargePageMinimum的倍數。

指定此旗標時,Offset 上的 64k 對齊需求不適用。

[in] PageProtection

所需的頁面保護。

對於使用 SEC_IMAGE 屬性建立的檔案對應物件,PageProtection 參數沒有任何作用,而且應該設定為任何有效的值,例如 PAGE_READONLY

[in, out, optional] ExtendedParameters

MEM_EXTENDED_PARAMETER類型之一或多個擴充參數的選擇性指標。 每個擴充參數值本身都可以有 MemExtendedParameterAddressRequirementsMemExtendedParameterNumaNodeType 字段。 如果未提供 MemExtendedParameterNumaNode 擴充參數,則行為會與 VirtualAlloc/MapViewOfFile 函式相同(亦即,實體頁面的慣用 NUMA 節點是根據第一次存取記憶體之線程的理想處理器來決定)。

[in] ParameterCount

ExtendedParameters 所指向的擴充參數數目

傳回值

如果成功,會傳回對應檢視的基位址。 否則,使用 getLastErrorgetLastError 傳回 NULL 和擴充錯誤狀態。

言論

此 API 可協助支援高效能遊戲,以及伺服器應用程式,這些應用程式對於管理其虛擬位址空間有特定需求。 例如,在先前保留的區域之上對應記憶體;這適用於實作自動包裝環形緩衝區。 並配置具有特定對齊方式的記憶體;例如,若要讓應用程式視需要認可大型/大型頁面對應區域。

針對新的設定使用此函式,您可以:

  • 指定虛擬位址空間的範圍和 2 的對齊限制
  • 指定任意數目的擴充參數
  • 將實體記憶體的慣用NUMA節點指定為擴充參數
  • 指定佔位元元作業(特別是取代)。

若要指定 NUMA 節點,請參閱 ExtendedParameters 參數。

例子

如需程式代碼範例,請參閱 virtualAlloc2 中的案例 1

要求

要求 價值
最低支援的用戶端 Windows 10 版本 1803 [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2016 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 memoryapi.h (包括 Windows.h)
連結庫 onecore.lib
DLL Kernel32.dll

另請參閱

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2