XMemAllocDefault
預設的記憶體配置常式。語法
參數
Size 類型:SIZE_T [in] 所要求的記憶體區塊大小。 Attributes類型:ULONGLONG [in] 配置的屬性。請參閱 XALLOC_ATTRIBUTES 傳回值 類型:PVOID 傳回指向已配置記憶體區塊的指標。 備註 系統匯出兩個預設函式:XMemAllocDefault 和 XMemFreeDefault。這些代表配置攔截程序的初始值。如果遊戲選擇不提供自己的配置攔截程序,則會改用這些系統預設配置器。如果遊戲想要提供配置攔截程序以進行追蹤,但不想實作自己的配置器,則可以直接呼叫預設配置器。 XMemAllocDefault 接受與 XMemAlloc 相同的參數。它為不想攔截此行為,或想要在未處理的情況下回復為預設行為的遊戲,提供 XMemAlloc 的作業系統實作。 XBOX 平台會將其對遊戲記憶體進行的所有配置都透過 XMemAlloc 進行,讓開發人員有機會監視或處理平台的記憶體需求。遊戲可以針對透過 XMemAlloc 傳入的部分或全部要求提供自己的記憶體管理員。其餘的要求則使用 XMemAllocDefault API。XMemAllocDefault 透過以下三種機制之一來處理配置要求:HeapAlloc、VirtualAlloc 或一系列內部管理的堆積。要使用這三種機制中的哪一種,取決於配置的類型和對齊需求。

- 堆積會視需要建立,因此如果特定大型/小型大小沒有特定類型的配置,則永遠不會建立該堆積。
- 每個堆積會保留 2 GB 的虛擬位址空間。因此,指定堆積的配置不能超過 2 GB。
- 如果堆積設定為使用 2MB 頁面,每個堆積會視需要認可 2 MB 頁面,因此即使要求 64 KB 頁面,每個配置也會從 2 MB 頁面滿足。根據預設,如果系統的 2 MB 頁面已用盡,使用 2 MB 頁面的堆積可以降級為 64KB 頁面。您可以透過搭配 XMemSetOption 使用
eXMEMOPT_XMEMALLOCDEFAULT_DISABLEPAGESIZEDEMOTION來停用此降級行為。 - 如果堆積設定為使用 64KB 頁面,每個堆積會視需要認可 512 KB 的頁面。
- 每個堆積都是單一執行緒,因此來自多個執行緒的同時配置和/或釋放要求會被序列化。只有在每個個別堆積內才需要序列化,因此來自不同堆積的同時要求可以同時處理。
- 每個堆積會嘗試盡可能緊密地封裝配置 (同時仍滿足對齊條件約束),以將支援堆積所需的記憶體量降到最低。
- 每個堆積可以指定自己的配置遲滯,這決定了記憶體釋放後歸還給作業系統的積極程度。根據預設,每個圖形堆積指定 64 MB 的遲滯,而 XALLOC_MEMTYPE_HEAP_CACHEABLE 堆積指定 8 MB (這些堆積不太可能被使用,因為可快取的堆積配置通常不會指定 > 16 位元組的對齊需求)。如果遲滯設定為 64 MB,表示堆積必須累積 64 MB 的可用頁面,才會將任何可用頁面歸還給作業系統。這可確保只要所需的記憶體量在遲滯量內波動,堆積程式碼就永遠不需要再向作業系統要求。
- 堆積一開始沒有認可的記憶體,並會視需要向作業系統要求記憶體。不過,如有需要,堆積可以透過針對該堆積呼叫 XMemPreallocateFreeSpace,從作業系統預先配置記憶體。這實際上會將該堆積的可用頁面保留量提升至遲滯上限。
