Skip to main content
在 Windows 和 Microsoft Game Development Kit (GDK) 中,核心記憶體以單一集區的形式存在,由核心和所有驅動程式共用。核心記憶體一律從系統分割區配置。 核心的大部分記憶體需求由平台負責,因此不會從遊戲的記憶體預算中扣除。 不過,以下說明遊戲程式碼何時會直接負責核心記憶體的使用。
  • 每個虛擬記憶體保留區的追蹤結構
  • 處理檔案、事件和執行緒同步處理物件
  • 網路
遊戲應為其直接負責的核心使用量提供記憶體。由於核心記憶體以單一集區的形式存在,因此配置無法像二進位檔和堆積的平台與遊戲使用量那樣「分割」。 取而代之的是,系統使用不同的機制,讓開發人員能以確定性的方式提供必要的記憶體。 OS 在 Microsoft Game Development Kit (GDK) OS 的開機程序中,會配置其所耗用的幾乎所有核心記憶體。開機後,平台使用量的一般變動約為 1 到 2 MB。 啟動遊戲處理程序時,系統會查詢目前的核心記憶體耗用量,並在目前核心記憶體耗用量之上 16 MB 處建立「雜訊下限」。 建立此值的目的是,當超過限制時,這是遊戲行為的直接結果,而非一般 OS 變動所致。 監視的實作方式是檢測下列已知會導致核心記憶體配置的 API。
  • CreateFile
  • CreateEvent
  • CreateSemaphore
如果在核心記憶體使用量接近或已超過閾值時呼叫其中一個 API,會透過 XError 和偵錯資料流提供額外資訊。 如果核心記憶體使用量已超過限制,API 呼叫會失敗,且 GetLastError() 值為 ERROR\_NOT\_ENOUGH\_MEMORY。 診斷輸出可在附加的偵錯工具、xbwatson.exe 和 xbdbgmon.exe 中檢視。

警告 (14 MB 時)

在 14 MB 觸發警告時,會出現下列輸出。

錯誤 (16 MB 時)

在 16 MB 觸發錯誤時,會出現下列輸出。
下表顯示集區標籤格式。 也會出現下列錯誤。
所有核心記憶體配置都會加上標籤 (類似於使用 XMEM\_MAKE\_TAG 和 XMemVirtualAlloc 加上標籤),以指出記憶體的用途。標籤有助於判斷記憶體使用量的來源。 下表顯示與遊戲使用量相關的最常見「高使用率」標籤。 核心記憶體分為兩大類別,稱為「非分頁」和「分頁」。在 Microsoft Game Development Kit (GDK) 中,這些類別之間沒有功能上的差異,可以視為同義。

常見的核心記憶體成本

下表顯示所列每個動作的預期核心記憶體成本。

提高限制

較小型遊戲的記憶體使用量可能符合現有限制。不過,較大型的遊戲必須提供記憶體以支援其核心記憶體使用量。 XMemTransferMemory API 用來提供必要的記憶體。

分析核心集區使用量

PIX 目前不支援監視核心集區使用量。您可以使用 xperf 和 Windows Performance Analyzer (WPA) 來監視耗用量。 使用下列步驟來分析核心記憶體。
  1. 輸入命令 xbrun /x/title xperf -start -on PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree -f d:\krnl.etl
  2. 執行遊戲案例。
  3. 輸入命令 xbrun /x/title xperf -stop -d d:\krnl.merged.etl
  4. 輸入命令 xbcp xd:\krnl.merged.etl %TEMP%\pool_usage.etl
  5. 在 WPA 中開啟 pool_usage.etl 檔案,並如圖 1 所示進行分析。
圖 1. 顯示 WPA 中的核心記憶體集區分析。 WPA 中核心記憶體集區分析的螢幕擷取畫面
Last modified on October 6, 2026