メモリ割り当て API ファミリ
VirtualAlloc/VirtualFree
VirtualAlloc と VirtualFree は、Windows PC 環境上のこれらの API の標準実装と同一になりました。これにより、これらの API を使用してメモリを取得する既存のコードに対して高い互換性が提供されます。XBOX One ERA OS では、VirtualAlloc は MEM_TITLE、MEM_GRAPHICS、MEM_TOOL フラグを介して XBOX 固有のメモリ タイプを割り当てるように変更されていました。これらのフラグはサポートされなくなりました。代わりに XMemVirtualAlloc を使用してください。
HeapAlloc/HeapFree (および類似の API)
Win32 ヒープ関連の API も、Windows PC 環境上のこれらの API の標準実装と同一です。VirtualAlloc と同様に、これにより既存のコードとの高い互換性が提供されます。重要な点として、HeapAlloc と HeapFree は、C ランタイム/VCRuntime ライブラリが malloc/new/free/delete および関連する C 標準メモリ API を実装するために使用する API です。
すべての標準 Win32 ヒープは、最適なパフォーマンスを提供するために、バックエンド ストレージにラージ (2 MB) ページを使用します。ヒープは、着信する割り当てを満たすために各 2 MB ページを効率的に細分し、4 KB ページ上の Win32 ヒープと比較してメモリ フットプリントがほとんど増加しません。これにより、Win32 ヒープが拡張されるときにコストの高い VirtualAlloc API 呼び出しを行う頻度も減少します。
XBOX One ERA OS では、
HeapAlloc は Win32 ヒープを介してデバッグ/拡張メモリを取得するために HEAP_TOOL フラグを受け入れるように変更されていました。このフラグは非推奨となり、Microsoft Game Development Kit (GDK) の将来の更新で、この機能を置き換える新しい API が利用可能になります。XMemVirtualAlloc
XMemVirtualAlloc は、Microsoft Game Development Kit (GDK) 用に作成された新しい API です。この API は、XBOX One ERA 環境でMEM_TITLE、MEM_GRAPHICS、MEM_TOOL フラグを指定して行われていた VirtualAlloc 呼び出しの使用を置き換えます。パラメーターと呼び出し規約は VirtualAlloc と密接に一致しており、必要なメモリの種類に関する追加の (XBOX 固有の) 詳細を呼び出し元が追加できる新しい XMemFlags フィールドが追加されています。
XMemAllocatePhysicalPages/XMemMapPhysicalPages/XMemFreePhysicalPages
物理ページ マッピング API を使用して、メモリ内の物理ページのインデックスを取得できます。この方法でページを割り当てると、ゲームは RAM の所有権を完全に制御できます。返されたページ番号を組み合わせて、必要に応じてゲームの仮想アドレス空間にマップできます。 XBOX One ERA OS と同様に、返される各物理ページ番号は 64 KB の RAM を表します。個々のページや任意のページ グループを、MEM_64K_PAGES で作成した適切な予約にマップできます。2 MB アラインされた 32 の連続ページのグループを提供することで、2 MB の予約へのマッピングも可能です。
ページは、異なるページ保護で複数回マップできます。たとえば、あるマッピングは PAGE_READWRITE で、別のマッピングは PAGE_READONLY にできます。ただし、異なるキャッシュ属性 (WRITEBACK、WRITECOMBINE、UNCACHED) でページを複数回マップすることはできません。試みるとエラーが返されます。これは XBOX One ERA でも不可能でしたが、試みると失敗が黙って行われ、動作しているように見えていました。
Microsoft GDK ゲーム OS の仮想メモリは、Windows のメモリ システムと同様に動作します。XMemVirtualAlloc を使用して仮想アドレス空間で隣接する 2 つのアドレスを割り当て、その後、XMemMapPhysicalPages への 1 回の呼び出しでそれらのページをマップしようとすると、動作は未定義となり、動作することは期待されません。仮想アドレス空間ではたまたま隣接していても、メモリ システムの観点では別々の割り当てとして扱われます。ページのマップ解除にも同じことが当てはまります。
XMemVirtualQuery/XMemGetWorkingSetStatistics
XMemVirtualQuery および XMemGetWorkingSetStatistics は、XBOX 固有のメモリ使用の詳細を調査するために利用できる追加の診断 API です。XMemVirtualQuery はVirtualQuery に非常に似ています。XMemVirtualQuery は、ページ サイズやメモリの所有権 (システムまたはゲーム) など、VirtualQuery からは利用できない追加情報を返します。XMemGetWorkingSetStatistics は、現在使用中のメモリ フットプリントに関する情報を返します。