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

# 为游戏和开发套件配置内存

> 为游戏和开发套件配置内存

本主题介绍游戏如何配置其零售内存性能，以及如何在开发目的下启用额外的标题内存。

## 在 XBOX One X 和 XBOX Series X 开发套件上配置标题内存

运行于 XBOX One X 与 XBOX Series X 上的游戏最多可分别使用 8.9 GB 和 13 GB 内存。由于现代游戏的需求差异很大，此值可由游戏开发者配置。有些游戏可能希望在 XBOX 主机家族中保持一致的内存分布，而另一些游戏则可能需要更多内存来加载更高分辨率的纹理或进行针对 XBOX One X/Xbox Series X 的优化。你可以在 XBOX One X 和 XBOX Series X 上为标题的内存配置选择两种状态之一。

<a id="ID4EWC" />

| 主机类型 | 主机模式 | 标题内存模式 | 标题内存 | 工具内存 |
| :- | :-: | :-: | :-: | -: |
| XBOX One/Xbox One S | | | 5,120 MiB | 1,012 MiB |
| XBOX One X | | Standard<br />Advanced | 8,128 MiB<br />9,152 MiB | 2,024 MiB<br /> 1,012 MiB |
| | | | | |
| XBOX One X Devkit | XBOX One / XBOX One S | | 5,120 MiB | 5,028 MiB |
| XBOX One X Devkit | XBOX One X test | Standard<br />Advanced | 8,128 MiB<br />9,152 MiB | 2,024 MiB<br /> 1,012 MiB |
| XBOX One X Devkit | XBOX One X Devkit \[44] | Standard<br />Advanced | 8,128 MiB<br />9,152 MiB | 14,168 MiB<br />13,156 MiB |
| | | | | |
| XBOX Series S | | Standard<br />Advanced | 7,998 MiB<br />8,572 MiB | N/A |
| XBOX Series X | | Standard<br />Advanced | 10,208 MiB<br />13,312 MiB | N/A |
| | | | | |
| XBOX Series X Devkit | Lockhart Profiling (XBOX Series S) | Standard<br />Advanced | 7,998 MiB<br />8,572 MiB | 6,056 MiB<br />6,048 MiB |
| XBOX Series X Devkit | Anaconda Profiling (XBOX Series X) | Standard<br />Advanced | 10,208 MiB<br />13,312 MiB | 9,614 MiB<br />15,666 MiB |
| XBOX Series X Devkit | Scarlett 40GB | | 37,156 MiB | |

有关配置主机模式的更多信息，请参阅 [Microsoft 游戏开发工具包主机模式](https://learn.microsoft.com/archive/console-modes-toc)。

### 在 MicrosoftGame.config 中配置标题内存

在 [MicrosoftGame.config](/zh-CN/reference/system/microsoftgameconfig/microsoftgameconfig-schema) 中，有三个元素用于管理标题内存模式。XboxOneXTitleMemory 元素管理 XBOX One 游戏在 XBOX One X 上运行时的标题内存模式。XboxLockhartTitleMemory 和 XboxAnacondaTitleMemory 元素管理 XBOX Series X|S 游戏在 XBOX Series X 开发套件上以 "LockhartProfiling" 或 "AnacondaProfiling" 模式运行时的标题内存模式。这些元素的允许值为 "Standard" 和 "Advanced"。

对于 XBOX One X，Standard 提供 7.9 GB，而 Advanced 为游戏提供 8.9 GB。选择 Standard 时，这 1 GB 的差额并不会归还给系统，而是应用于 XBOX 游戏缓存以提升游戏的 I/O 性能。

对于 XBOX Series S，Standard 提供 7.7 GB 内存。其中大部分 (7904 MiB) 是“GPU 最佳带宽”内存，峰值访问速度为 224 GB/s，剩余部分 (94 MiB) 是标准内存 (56 GB/s)。Advanced 额外提供 574 MiB，其中 128 MiB 为“GPU 最佳带宽”。选择 Standard 内存模式时，这部分差额会交还给系统，以便在某些情况下（例如在前台通过系统 Web 浏览器打开一个 URL）无需挂起并快速恢复游戏。

对于 XBOX Series X，Standard 提供 10 GB 内存，对 GPU 以 560 GB/sec 的峰值带宽运行（GPU 最佳带宽）。Advanced 让游戏能够额外访问 3 GB 内存，这部分内存对 GPU 的峰值带宽为 336 GB/sec（标准带宽）。与 XBOX One X 一样，若选择 Standard 内存模式，这部分差额也不会归还给系统，而是应用于 XBOX 游戏缓存等系统功能，以在游戏运行时增强对其的支持。

## 在开发过程中配置和访问额外内存

启用 ProfilingMode 后，会向游戏提供额外内存，可用于开发过程中的任何用途，从游戏引擎工具到未经优化的游戏资源均可。

该额外内存在游戏与 [PIX](/zh-CN/tools/tools-console/pix/pix) 等工具之间共享。启用 ProfilingMode 后可用的内存总量取决于开发套件硬件，对于 XBOX One X 开发套件和 XBOX Series X 开发套件，还取决于主机模式。

额外内存以两种方式对游戏可见：

* 可以使用 ExtraTitleMemory 配置项，指定通过所有标准内存分配例程直接提供给游戏的额外内存量。
* 未通过 ExtraTitleMemory 设置指派的任何内存都可以在调用 [XMemVirtualAlloc](/zh-CN/reference/system/xmem/functions/xmemvirtualalloc) 或 [XMemCreateWin32Heap](/zh-CN/reference/system/xmem/functions/xmemcreatewin32heap) 时指定 XMEM\_TOOL 标志来访问。有关如何在工具中使用 XMEM\_TOOL 堆的详细信息，请参阅下面的“在 XMEM\_TOOL 堆上分配内存”一节。

可以使用 [DevHome](/zh-CN/tools/tools-console/devhome/devhome)、[XBOX Manager](/zh-CN/tools/tools-console/xbom/xbom)、[XBOX Device Portal (XBOX 上的 Windows Device Portal)](/zh-CN/tools/tools-console/wdp/wdp) 或 [xbConfig](/zh-CN/tools/tools-console/commandlinetools/xbconfig) 命令行工具来设置 ExtraTitleMemory 配置项。

<a id="ID4EPC" />

### 在开发中使用额外内存的补充信息

* 在游戏中使用额外内存会减少 [PIX](/zh-CN/tools/tools-console/pix/pix) 等工具可用的内存。建议至少为 [PIX](/zh-CN/tools/tools-console/pix/pix) 保留 512MB 内存。
* 工具通常使用平台的内存预留来运行。在某些情况下，工具会需要使用标题内存。这些分配会使用 XMEM\_TOOL 标志进行，直到 XMEM\_TOOL 池耗尽后，才尝试从默认内存池分配。可以将 ToolingMemoryOverflow 标志设置为 false 来阻止这种溢出。请注意，即使你通过 ToolingMemoryOverflow 设置指定了不允许溢出，仍然有一些情况下 [PIX](/zh-CN/tools/tools-console/pix/pix) 和其他工具可能会占用标题内存。这些情况将在未来 GDK 版本中修复。
* 更改主机模式不会更改 Profiling Mode 设置。额外内存仍可供你的游戏、PIX 和工具使用。若要关闭额外内存，请关闭 Profiling Mode。有关主机模式的更多信息，请参阅 [使用主机模式测试你的游戏](/zh-CN/home/setup-install/concepts/using-console-modes)。

<a id="ID4EWD" />

### 启用 Profiling Mode

要访问额外的标题内存，请在 [DevHome](/zh-CN/tools/tools-console/devhome/devhome) 的 Performance 选项卡、[XBOX Manager](/zh-CN/tools/tools-console/xbom/xbom) 的 settings 选项卡、[XBOX Device Portal (XBOX 上的 Windows Device Portal)](/zh-CN/tools/tools-console/wdp/wdp) 的 Settings 页面，或者 xbConfig 命令行工具中启用 Profiling Mode。

在 [DevHome](/zh-CN/tools/tools-console/devhome/devhome) 中，通过 Performance 选项卡的 **PIX** 设置来启用 Profiling Mode。如果希望工具（在需要时）溢出到标题内存中，请选择 **Allow PIX and other tools to overflow and use your game's memory**。

<img src="https://mintcdn.com/microsoft-4404708b/EHFikhsC0GyEu9Ca/images/gdk/features/console/xbom_extended_memory_settings.png?fit=max&auto=format&n=EHFikhsC0GyEu9Ca&q=85&s=050e9e9407a98c777d957a4f88ec945c" alt="配置扩展内存设置" width="800" height="432" data-path="images/gdk/features/console/xbom_extended_memory_settings.png" />

<a id="ID4EVE" />

### 配置额外的标题内存

启用 Profiling Mode 后，你可以配置直接提供给游戏的额外内存量，以及提供给 XMEM\_TOOL 堆的内存量。默认情况下，不会向游戏提供额外内存。你可以在 [DevHome](/zh-CN/tools/tools-console/devhome/devhome) 的 Performance 选项卡、[XBOX Manager](/zh-CN/tools/tools-console/xbom/xbom) 的 settings 选项卡、[XBOX Device Portal (XBOX 上的 Windows Device Portal)](/zh-CN/tools/tools-console/wdp/wdp) 的 settings 页面，或 [xbConfig](/zh-CN/tools/tools-console/commandlinetools/xbconfig) 命令行工具中更改此默认设置。

在 Dev Home 中，选择 Performance 选项卡下 **PIX** 设置中的 **Manage tool memory** 按钮，会弹出一个滑块控件，让你配置分配给游戏的额外内存量：

<img src="https://mintcdn.com/microsoft-4404708b/EHFikhsC0GyEu9Ca/images/gdk/features/console/xbom_manage_tools_memory.png?fit=max&auto=format&n=EHFikhsC0GyEu9Ca&q=85&s=324b134c57bfe5ed014e349f67642c2a" alt="管理工具内存" width="800" height="370" data-path="images/gdk/features/console/xbom_manage_tools_memory.png" />

[XBOX Manager](/zh-CN/tools/tools-console/xbom/xbom) 和 [XBOX Device Portal (XBOX 上的 Windows Device Portal)](/zh-CN/tools/tools-console/wdp/wdp) 通过 **Additional Memory for Title** 和 **Title Memory Overflow** 设置暴露了配置额外内存的能力。为 **Additional Memory for Title** 指定一个值会将标题内存扩展相应的兆字节数（并相应缩小工具内存）。

<img src="https://mintcdn.com/microsoft-4404708b/EHFikhsC0GyEu9Ca/images/gdk/features/console/xbom_additional_memory_for_title.png?fit=max&auto=format&n=EHFikhsC0GyEu9Ca&q=85&s=d225b26b98533189dbe797a02c96ff70" alt="配置额外标题内存" width="657" height="662" data-path="images/gdk/features/console/xbom_additional_memory_for_title.png" />

若要通过 [xbConfig](/zh-CN/tools/tools-console/commandlinetools/xbconfig) 命令行工具配置额外内存，请使用 **ExtraTitleMemory** 和 **ToolingMemoryOverflow** 设置。

<a id="ID4EQG" />

## 分配工具内存

访问工具内存需要通过传递给相应分配的标志来实现。

### XMemVirtualAlloc

[XMemVirtualAlloc](/zh-CN/reference/system/xmem/functions/xmemvirtualalloc) 应使用 XMEM\_TOOL 标志。

```c++ theme={null}
    // Allocate 1 MB of tooling memory by using 64 K pages. 
    PVOID cpu64kmemory = XMemVirtualAlloc (NULL, 
                                           1024 * 1024, 
                                           MEM_64K_PAGES | MEM_RESERVE | MEM_COMMIT, 
                                           XMEM_TOOL | XMEM_CPU, 
                                           PAGE_READWRITE); 
```

### XMemIsToolsMemAvailable / XMemCreateWin32Heap

[XMemIsToolsMemAvailable](/zh-CN/reference/system/xmem/functions/xmemistoolsmemavailable) / [XMemCreateWin32Heap](/zh-CN/reference/system/xmem/functions/xmemcreatewin32heap) 应使用 XMEM\_HEAP\_TOOL 标志。

```c++ theme={null}
    //  
    // XMemIsToolsMemAvailable and XMemCreateWin32Heap example. 
    //  
 
    DWORD HeapType = XMemIsToolsMemAvailable() ? XMEM_HEAP_TOOL : XMEM_HEAP_DEFAULT; 
 
    // Create a dev scratch usage heap on tools or title that isn't limited in size. 
    HANDLE ScratchHeap = XMemCreateWin32Heap(HeapType, 0);   
```

<a id="ID4EEH" />

### 查询 XMEM\_TOOL 堆上的内存

可以使用 [XMemGetWorkingSetStatistics](/zh-CN/reference/system/xmem/functions/xmemgetworkingsetstatistics) API 获取 XMEM\_TOOL 池上的当前内存统计信息，包括其配置大小和当前可用内存量。示例请参阅 [XMemGetWorkingSetStatistics](/zh-CN/reference/system/xmem/functions/xmemgetworkingsetstatistics)。

## 另请参阅

[主机上的 Developer Home (Dev Home) 性能页面](/zh-CN/tools/tools-console/devhome/devhome-performance)

[Microsoft 游戏开发工具包主机模式](https://learn.microsoft.com/archive/console-modes-toc)

[XMemVirtualAlloc](/zh-CN/reference/system/xmem/functions/xmemvirtualalloc)

[XMemGetWorkingSetStatistics](/zh-CN/reference/system/xmem/functions/xmemgetworkingsetstatistics)


## Related topics

- [XBOX System Monitor](/zh-CN/tools/tools-console/visualstudio/xbox-system-monitor.md)
- [XMemIsToolsMemAvailable](/zh-CN/reference/system/xmem/functions/xmemistoolsmemavailable.md)
- [XMemGetWorkingSetStatistics](/zh-CN/reference/system/xmem/functions/xmemgetworkingsetstatistics.md)
- [XMemCreateWin32Heap](/zh-CN/reference/system/xmem/functions/xmemcreatewin32heap.md)
- [主页 (Dev Home)](/zh-CN/tools/tools-console/devhome/devhome-home.md)
