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

# XMEM_SET_ALLOCATION_HOOKS

> XMEM_SET_ALLOCATION_HOOKS

# XMEM\_SET\_ALLOCATION\_HOOKS

供游戏用于注册内存分配挂钩。

## 语法

```cpp theme={null}
#define XMEM_SET_ALLOCATION_HOOKS(AllocRoutine, FreeRoutine) \
    __declspec(dllexport) XMEM_ALLOCATION_HOOKS __XMemAllocationHooks__ = { AllocRoutine, FreeRoutine };
```

### 参数

*AllocRoutine*   *In*

类型：PXMEMALLOC\_ROUTINE

指向游戏的分配函数的指针。有关此函数的定义，请参阅 [XMEMALLOC\_ROUTINE](/zh-CN/reference/system/xmem/functions/xmemalloc_routine.md) 主题。

*FreeRoutine*   *In*\
类型：PXMEMFREE\_ROUTINE

指向游戏的释放函数的指针。有关此函数的定义，请参阅 [XMEMFREE\_ROUTINE](/zh-CN/reference/system/xmem/functions/xmemalloc_routine.md) 主题。

## 备注

可以通过 **XMEM\_SET\_ALLOCATION\_HOOKS** 宏使用游戏提供的回调来监视（或重写）分配。通过正确使用此宏，游戏可以跟踪游戏代码以及平台代码发出的每一次分配。

如果游戏选择不提供自己的分配挂钩，则会改用 **XMemAllocDefault** 和 **XMemFreeDefault**（请参阅 xmem.h 以了解这些挂钩的声明）。如果游戏希望为了跟踪而提供分配挂钩，但不希望实现自己的分配器，则可以直接调用默认分配器。

如果你要挂接分配相关函数，务必同时为 [XMEMALLOC\_ROUTINE](/zh-CN/reference/system/xmem/functions/xmemalloc_routine.md) 和 [XMEMFREE\_ROUTINE](/zh-CN/reference/system/xmem/functions/xmemfree_routine.md) 提供实现；仅挂接其中一个将被视为错误。

游戏提供的挂钩从游戏可执行文件中导出，并在 xmem.dll 的加载时（通常是游戏启动时）绑定。

> [!NOTE]
>
> 由 XMemSetAllocationHooks 注册的函数必须在游戏 exe 中定义，以确保地址被静态填充。如果所提供的函数指针指向游戏 exe 引用的 DLL 中的函数，编译器必须发出静态初始化程序代码来填充该内存，而这段代码可能在平台查询重写挂钩之后才执行，从而导致不可预测的行为。如果平台检测到可能发生了这种情况，会在调试器输出窗口中显示警告。

## 要求

**头文件：** xmem.h

**支持的平台：** XBOX One 系列主机和 XBOX Series 主机

## 另请参阅

[XMem 参考](/zh-CN/reference/system/xmem/xmem_members.md)\
[XMEM\_ALLOCATION\_HOOKS](/zh-CN/reference/system/xmem/structs/xmem_allocation_hooks.md)\
[XMEMALLOC\_ROUTINE](/zh-CN/reference/system/xmem/functions/xmemalloc_routine.md)\
[XMEMFREE\_ROUTINE](/zh-CN/reference/system/xmem/functions/xmemalloc_routine.md)


## Related topics

- [XMEM_ALLOCATION_HOOKS](/reference/system/xmem/structs/xmem_allocation_hooks.md)
- [XMemFreeDefault](/reference/system/xmem/functions/xmemfreedefault.md)
