> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft GDK ゲーム OS メモリ マネージャーの使用

> Microsoft GDK ゲーム OS メモリ マネージャーの使用

Microsoft GDK ゲーム OS ではメモリ マネージャーの内部は大きく異なりますが、メモリを割り当てて管理するために利用できる API は、XBOX One ERA OS で利用可能な API と非常によく似ています (ただし同一ではありません)。

## メモリ割り当て API ファミリ

### VirtualAlloc/VirtualFree

`VirtualAlloc` と `VirtualFree` は、Windows PC 環境上のこれらの API の標準実装と同一になりました。これにより、これらの API を使用してメモリを取得する既存のコードに対して高い互換性が提供されます。XBOX One ERA OS では、`VirtualAlloc` は `MEM_TITLE`、`MEM_GRAPHICS`、`MEM_TOOL` フラグを介して XBOX 固有のメモリ タイプを割り当てるように変更されていました。これらのフラグはサポートされなくなりました。代わりに [XMemVirtualAlloc](/reference/system/xmem/functions/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 呼び出しを行う頻度も減少します。

<Note>XBOX One ERA OS では、`HeapAlloc` は Win32 ヒープを介してデバッグ/拡張メモリを取得するために `HEAP_TOOL` フラグを受け入れるように変更されていました。このフラグは非推奨となり、Microsoft Game Development Kit (GDK) の将来の更新で、この機能を置き換える新しい API が利用可能になります。</Note>

### XMemVirtualAlloc

[XMemVirtualAlloc](/reference/system/xmem/functions/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 でも不可能でしたが、試みると失敗が黙って行われ、動作しているように見えていました。

<Note>Microsoft GDK ゲーム OS の仮想メモリは、Windows のメモリ システムと同様に動作します。[XMemVirtualAlloc](/reference/system/xmem/functions/xmemvirtualalloc) を使用して仮想アドレス空間で隣接する 2 つのアドレスを割り当て、その後、[XMemMapPhysicalPages](/reference/system/xmem/functions/xmemmapphysicalpages) への 1 回の呼び出しでそれらのページをマップしようとすると、動作は未定義となり、動作することは期待されません。仮想アドレス空間ではたまたま隣接していても、メモリ システムの観点では別々の割り当てとして扱われます。ページのマップ解除にも同じことが当てはまります。</Note>

### XMemVirtualQuery/XMemGetWorkingSetStatistics

[XMemVirtualQuery](/reference/system/xmem/functions/xmemvirtualquery) および [XMemGetWorkingSetStatistics](/reference/system/xmem/functions/xmemgetworkingsetstatistics) は、XBOX 固有のメモリ使用の詳細を調査するために利用できる追加の診断 API です。[XMemVirtualQuery](/reference/system/xmem/functions/xmemvirtualquery) は `VirtualQuery` に非常に似ています。`XMemVirtualQuery` は、ページ サイズやメモリの所有権 (システムまたはゲーム) など、`VirtualQuery` からは利用できない追加情報を返します。[XMemGetWorkingSetStatistics](/reference/system/xmem/functions/xmemgetworkingsetstatistics) は、現在使用中のメモリ フットプリントに関する情報を返します。


## Related topics

- [ソーシャル マネージャーのメモリとパフォーマンス](/ja-jp/services/xbox-services/community/social-manager/concepts/live-socmgr-mem-perf.md)
- [XBOX GDK タイトルのメモリ システム](/ja-jp/build/console-features/memory/index.md)
- [ソーシャル マネージャーの概念](/ja-jp/services/xbox-services/community/social-manager/concepts/live-socmgr-concepts-nav.md)
- [概念](/ja-jp/services/xbox-services/community/social-manager/concepts/index.md)
- [ソーシャル マネージャーの概要](/ja-jp/services/xbox-services/community/social-manager/live-social-manager-overview.md)
