> ## 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.

# XMemSetOption

> XMemSetOption

# XMemSetOption

XMem の構成設定を設定します。

## Syntax

```cpp theme={null}
void XMemSetOption(  
         XMEM_OPTION option  
)  
```

### Parameters

*option*   \_In\_\
型: [XMEM\_OPTION](/reference/system/xmem/structs/xmem_option)

設定するオプション構成。

### Return value

型: void

## Remarks

**XMemSetOption** は、XMem システムのオプション動作を構成するために使用します。

*eXMEMOPT\_VALIDATE\_XMEMALLOC* (BOOL)<br />
XMemAlloc の呼び出しから返されるメモリ プロパティが、要求されたメモリ タイプのアライメント、ページ サイズ、ページ保護、およびキャッシュ属性を満たしていることを検証する機能を有効にします。これは、XMemAlloc の独自実装のエラーを検出するために開発時に使用することを目的としています。検証ロジックのソース コードは、Microsoft Game Development Kit (GDK) の一部として提供されます。詳細については、`\GXDK\gameKit\Source\amd64\heap.c` にある `XmpVerifyXMemAllocRoutine` 関数を参照してください。

```
       // Enable memory validation on XMemAlloc
       XMEM_OPTION option;
       option.Option = eXMEMOPT_VALIDATE_XMEMALLOC;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_RAISE\_HEAPFREE\_CALLBACK\_ON\_REALLOC* (BOOL)<br />
HeapReAlloc が呼び出されたときに、`XMemSetWin32HeapTrackingHooks` で構成された HeapFree コールバックの呼び出しを有効にします。このオプションがない場合、HeapReAlloc コールバックは realloc の発生後に古いアドレスと新しいアドレスと共に呼び出されます。このオプションが設定されている場合、HeapFree コールバックは HeapReAlloc の呼び出し前に古いアドレスと共に追加で呼び出されます。

```
       // Enable calling the HeapFree callback on HeapReAlloc
       XMEM_OPTION option;
       option.Option = eXMEMOPT_RAISE_HEAPFREE_CALLBACK_ON_REALLOC;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_XMEMALLOCDEFAULT\_TAG\_VIRTUALALLOC* (BOOL)<br />
割り当てを満たすために `XMemAllocDefault` が行うすべての `XMemVirtualAlloc` の呼び出しに対して、コミット タグの追加を有効にします (たとえば、割り当て要求が内部 XMem ヒープに収まらないほど大きい場合)。コミット タグは XMemMakeTag('XmVA') で追加されます。これにより、開発者は `XMemAllocDefault` によって消費されるメモリの合計量を計算できます。詳細については、[診断とメモリ トラッキング](/build/console-features/memory/system-memory-diagnostics) を参照してください。

```
       // Enable commit tagging on XMemAllocDefault
       XMEM_OPTION option;
       option.Option = eXMEMOPT_XMEMALLOCDEFAULT_TAG_VIRTUALALLOC;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_SET\_XMEM\_TAG\_TREE\_SIZE* (INT)<br />
設定すると、カスタム XMem タグ用に割り当てられる記憶領域が、指定されたサイズ (メガバイト単位) に設定されます。

```
       // Configure XMem to use the specified size for XMem Tags
       XMEM_OPTION option;
       option.Option = eXMEMOPT_SET_XMEM_TAG_TREE_SIZE;
       option.u.Int = 4; // 4MB
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_XMEM\_WARN\_WHEN\_TAG\_TREE\_FULL* (BOOL)<br />
設定すると、カスタム XMem タグ用に割り当てられた記憶領域が枯渇した場合に、`XError` を通じてランタイム警告が発生します。

```
       // Configure XMem to raise a warning when XMem Tags storage space has been exhausted.
       XMEM_OPTION option;
       option.Option = eXMEMOPT_XMEM_WARN_WHEN_TAG_TREE_FULL;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_XMEMALLOCDEFAULT\_DISABLEPAGESIZEDEMOTION* (BOOL)<br />
`XMemAllocDefault` が使用する内部 XMem ヒープは、最初は 2MB ページを使用して作成されますが、2MB ページでヒープを拡張できない場合は 64KB ページに降格するフォールバックが構成されます。このフラグは、降格動作を無効にします。ページ サイズ降格ロジックのソース コードは、Microsoft Game Development Kit (GDK) の一部として提供されます。詳細については、`\GXDK\gameKit\Source\amd64\heap.c` にある `XmpAllocateHeapMemory` 関数を参照してください。

```
       // Disables page size demotion
       XMEM_OPTION option;
       option.Option = eXMEMOPT_XMEMALLOCDEFAULT_DISABLEPAGESIZEDEMOTION;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_XMEMALLOCDEFAULT\_TRAPUSEAFTERFREE* (BOOL)<br />
このオプションは、通常は内部 XMem ヒープによって処理されるすべての割り当てを、XMemVirtualAlloc の呼び出しに昇格するように `XMemAllocDefault` を構成します。さらに、メモリは VirtualFree(MEM\_DECOMMIT) を使用して解放されます。これは意図的に仮想アドレス空間をリークし、最終的には割り当ての失敗を引き起こしますが、use-after-free エラーを検出するための便利な診断支援となります。昇格ロジックのソース コードは、Microsoft Game Development Kit (GDK) の一部として提供されます。詳細については、`\GXDK\gameKit\Source\amd64\heap.c` にある `XmpTrapUseAfterFree` 変数の使用方法を参照してください。

```
       // Enable trapping use-after-free scenarios with XMemAllocDefault
       XMEM_OPTION option;
       option.Option = eXMEMOPT_XMEMALLOCDEFAULT_TRAPUSEAFTERFREE;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_XMEMALLOCDEFAULT\_USE64KPAGES* (BOOL)<br />
このオプションは、内部 XMem ヒープに対して 2MB ページではなく 64KB ページを使用するように `XMemAllocDefault` を構成します。さらに、64KB ページを使用するヒープでは、コミット/デコミットの粒度が 2MB ではなく 512KB になります。`XMemAllocDefalt` の実装のソース コードは、Microsoft Game Development Kit (GDK) の一部として提供されます。詳細については、`\GXDK\gameKit\Source\amd64\heap.c` ファイルを参照してください。

```
       // Configure XMem heaps to use 64KB pages and 512KB commit/decommit granularity
       XMEM_OPTION option;
       option.Option = eXMEMOPT_XMEMALLOCDEFAULT_USE64KPAGES;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_ALLOW\_WRITEABLE\_FILEMAPPINGS* (BOOL)<br />
このオプションを有効にすると、書き込み可能フラグを指定して `CreateFileMappingA/W` を呼び出したときに成功できるようになります。

```
       // Configure XMem to allow writeable file mappings
       XMEM_OPTION option;
       option.Option = eXMEMOPT_ALLOW_WRITEABLE_FILEMAPPINGS;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

## Requirements

**ヘッダー:** xmem.h

**ライブラリ:** xmem.lib\
**サポートされているプラットフォーム:** XBOX One ファミリー本体および XBOX Series 本体

## See also

[XMem](/reference/system/xmem/xmem_members)
[XMemMakeTag](/reference/system/xmem/functions/xmemmaketag)
[XError](/reference/system/xerror/xerror_members)


## Related topics

- [XMEM_OPTION](/ja-jp/reference/system/xmem/structs/xmem_option.md)
- [XMemVirtualQuery](/ja-jp/reference/system/xmem/functions/xmemvirtualquery.md)
- [PartySetTranscriptionOptionsCompletedStateChange](/ja-jp/services/playfab/multiplayer/networking/reference/structs/partysettranscriptionoptionscompletedstatechange.md)
- [PartySetTextChatOptionsCompletedStateChange](/ja-jp/services/playfab/multiplayer/networking/reference/structs/partysettextchatoptionscompletedstatechange.md)
- [XMEM_OPTIONS](/ja-jp/reference/system/xmem/enums/xmem_options.md)
