> ## 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에 대한 구성 설정을 지정합니다.

## 구문

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

### 매개 변수

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

설정할 옵션 구성입니다.

### 반환 값

형식: void

## 설명

**XMemSetOption**은 XMem 시스템의 선택적 동작을 구성하는 데 사용됩니다.

*eXMEMOPT\_VALIDATE\_XMEMALLOC* (BOOL)<br />
XMemAlloc에 대한 호출에서 반환된 메모리 속성의 확인을 활성화하여 요청된 메모리 유형의 정렬, 페이지 크기, 페이지 보호 및 캐시 특성을 충족하는지 확인합니다. 이는 개발 시간에 XMemAlloc의 사설 구현에서 오류를 찾는 데 사용됩니다. 확인 로직에 대한 소스 코드는 Microsoft Game Development Kit(GDK)의 일부로 제공됩니다. 자세한 내용은 `\GXDK\gameKit\Source\amd64\heap.c`의 `XmpVerifyXMemAllocRoutine` 함수를 참조하세요.

```
       // 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 콜백을 호출하는 것을 활성화합니다. 이 옵션이 없으면 realloc이 발생한 후 이전 주소와 새 주소로 HeapReAlloc 콜백이 호출됩니다. 이 옵션이 설정된 경우 HeapReAlloc 호출 전에 이전 주소로 HeapFree 콜백도 추가로 호출됩니다.

```
       // HeapReAlloc에서 HeapFree 콜백을 호출하도록 활성화
       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)을 참조하세요.

```
       // 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 태그에 대해 할당된 저장 공간이 지정된 크기(MB)로 설정됩니다.

```
       // XMem에 XMem 태그에 대해 지정된 크기를 사용하도록 구성
       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`를 통해 런타임 경고가 발생합니다.

```
       // XMem 태그 저장 공간이 소진되었을 때 XMem이 경고를 발생하도록 구성합니다.
       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` 함수를 참조하세요.

```
       // 페이지 크기 강등 비활성화
       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` 변수의 사용을 참조하세요.

```
       // XMemAllocDefault를 사용하여 use-after-free 시나리오 트래핑 활성화
       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` 파일을 참조하세요.

```
       // XMem 힙이 64KB 페이지 및 512KB 커밋/커밋 해제 세분성을 사용하도록 구성
       XMEM_OPTION option;
       option.Option = eXMEMOPT_XMEMALLOCDEFAULT_USE64KPAGES;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

<br />

*eXMEMOPT\_ALLOW\_WRITEABLE\_FILEMAPPINGS* (BOOL)<br />
활성화된 경우 이 옵션은 쓰기 가능 플래그와 함께 호출되는 `CreateFileMappingA/W` 호출이 성공하도록 허용합니다.

```
       // XMem이 쓰기 가능 파일 매핑을 허용하도록 구성
       XMEM_OPTION option;
       option.Option = eXMEMOPT_ALLOW_WRITEABLE_FILEMAPPINGS;
       option.u.Bool = TRUE;
       XMemSetOption(option);
```

## 요구 사항

**헤더:** xmem.h

**라이브러리:** xmem.lib\
**지원 플랫폼**: XBOX One 제품군 콘솔 및 XBOX Series 콘솔

## 함께 보기

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


## Related topics

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