XMemVirtualAlloc
保留、認可或變更呼叫處理序之虛擬位址空間中某個分頁區域的狀態。與標準 Win32 VirtualAlloc 不同,此函式所配置的記憶體_不_保證會自動初始化為零。
語法
參數
BaseAddress _In_opt_類型:PVOID 要配置之區域的起始位址。如果正在保留記憶體,指定的位址會無條件捨去至配置細微度 (在 XBOX 上為 4K、64K 或 2MB) 最接近的倍數。如果記憶體已保留且正在認可,則位址會無條件捨去至下一個分頁邊界。如果此參數為 NULL,系統會決定要在何處配置區域。
Size _In_
類型:SIZE_T 區域的大小 (以位元組為單位)。如果 BaseAddress 參數為 NULL,此值會無條件進位到下一個分頁邊界。否則,配置的分頁會包含在 BaseAddress 到 BaseAddress+Size 範圍內含有一或多個位元組的所有分頁。這表示跨越分頁邊界的 2 位元組範圍會導致兩個分頁都包含在配置的區域中。
AllocationType _In_
類型:DWORD 記憶體配置的類型。此參數必須包含下列其中一個值。
此參數也可以指定下列值,如下所示。
對於 ERA 遊戲,MEM_LARGE_PAGES 代表 64K 分頁,而在 Windows 桌面上代表 2MB 分頁。由於有此歧義,Microsoft Game Development Kit (GDK) 已將其移除。
XMemFlags _In_
類型:ULONGLONG 在 XBOX 上用來取得特定的特殊記憶體類型。此參數必須包含下列其中一個值。
在 XBOX 上,可以配置具有受限虛擬記憶體位址的記憶體,以保證不會使用高位元。使用下列任一值會將位址限制為只使用指定的位元數。XMEM_40BIT_ADDRESS (0x00007000ULL)、XMEM_41BIT_ADDRESS (0x00006000ULL)、XMEM_42BIT_ADDRESS (0x00005000ULL)、XMEM_43BIT_ADDRESS (0x00004000ULL)、XMEM_44BIT_ADDRESS (0x00003000ULL)、XMEM_45BIT_ADDRESS (0x00002000ULL)、XMEM_46BIT_ADDRESS (0x00001000ULL)。
在建立 D3D12Device 或呼叫 D3DConfigureVirtualMemory 之前,無法配置圖形記憶體。如果要求的記憶體將對 GPU 可見,遊戲_必須_同時指定明確的圖形分頁保護旗標,不再有依據 CPU 分頁保護設定的預設值。這是與舊版 XBOX OS 不同之處。
在 Anaconda 裝置以及模擬 Anaconda 的 Dante 裝置上,使用進階遊戲記憶體模式時,也可以套用下列參數。在所有其他情況下,這些參數都會被忽略。
這些旗標是選擇性的。如果未指定,所有圖形配置預設都會使用 XMEM_GPU_OPTIMAL_BANDWIDTH_PREFERRED,而所有其他配置預設都會使用 XMEM_STANDARD_BANDWIDTH_PREFERRED。
XMemFlags 參數包含選擇性的四字元代碼標籤。字元可以是 a-z、A-Z、0-9 和 $ 中的任一字元。可使用 XMemMakeTag 函式,在正確的位元位置建構正確編碼的標籤值。標籤只能與已認可的記憶體區域建立關聯,而不能與保留建立關聯。此四字元代碼標籤會由參數的高 24 位元表示。標籤可透過 XMemVirtualQuery 擷取,也會顯示在 PIX 記憶體分析中。
範例:
PageProtection _In_
類型:DWORD 要配置之分頁區域的記憶體保護。如果正在認可分頁,您可以指定任一 記憶體保護常數。 PageProtection 參數允許使用下列 XBOX 專屬值,且指定 XMEM_GRAPHICS 或 XMEM_GRAPHICS_32BIT_ADDRESS 時必須指定其中一個值。此需求是與舊版 XBOX OS 不同之處。對於以 XMEM_GRAPHICS 配置之範圍內的記憶體位址,這些值也可以指定給其他記憶體管理函式 (例如 VirtualProtect)。
此參數也可以指定下列值,如下所示。
傳回值
類型:PVOID 如果函式成功,傳回值為所配置分頁區域的基底位址。 如果函式失敗,傳回值為 NULL。若要取得延伸錯誤資訊,請呼叫 GetLastError。備註
每個分頁都有相關聯的 分頁狀態。XMemVirtualAlloc 函式可以執行下列作業:- 認可保留分頁的區域
- 保留可用分頁的區域
- 同時保留和認可可用分頁的區域
需求
標頭: xmem.h 程式庫: xmem.lib 支援的平台: XBOX One 系列主機和 XBOX Series 主機另請參閱
XMem 參考XMemMapPhysicalPages
VirtualFree
