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

# 内存钩子

> 通过在 PFInitialize 之前使用 PFMemSetFunctions 安装自定义 alloc 和 free 钩子，控制 PlayFab Services SDK 的内存分配。

# 管理内存分配

在 PlayFab Services SDK 的 C API 中，你可以指定一个函数回调，SDK 每次尝试分配内存时都会调用该回调。如果你不指定函数回调，SDK 会使用标准的内存分配例程。

要手动指定你的内存例程，可以执行以下步骤：

* 在游戏启动时：
  * 调用 [**PFMemSetFunctions**](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/functions/pfmemsetfunctions.md) 指定用于分配和释放内存的回调。
  * 调用 [**PFInitialize**](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfcore/functions/pfinitialize.md) 初始化 PlayFab Core 库。
  * 调用 [**PFServicesInitialize**](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfservices/functions/pfservicesinitialize.md) 初始化 PlayFab Services 库。

> [!NOTE]
>
> 顺序很重要。**PFMemSetFunctions** 必须先于 **PFInitialize**，而 **PFInitialize** 必须先于 **PFServicesInitialize**。如果跳过显式的 **PFInitialize** 调用，**PFServicesInitialize** 会在内部初始化 Core——但此时你的内存钩子尚未生效，因此 SDK 会转而使用默认的分配例程。

```cpp theme={null}
    PFMemoryHooks playFabHooks{ MyAllocHook, MyFreeHook };
    PFMemSetFunctions(&playFabHooks);
    HRESULT hr = PFInitialize(nullptr); // Add your own error handling when FAILED(hr) == true
    hr = PFServicesInitialize(nullptr); // Add your own error handling when FAILED(hr) == true
```

* 游戏运行期间：
  * 任何分配或释放内存的 SDK 调用都会调用你指定的内存处理回调。

* 游戏退出时：
  * 调用 [**PFServicesUninitializeAsync**](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfservices/functions/pfservicesuninitializeasync.md) 回收与 PlayFab Services 关联的所有资源。
  * 调用 [**PFUninitializeAsync**](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfcore/functions/pfuninitializeasync.md) 回收与 PlayFab Core 关联的所有资源。
  * 清理你的游戏自定义内存管理器。

## 参考

[API 参考文档](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/pfplatform_members.md)


## Related topics

- [SDK 生命周期](https://docs.xbox.com/zh-CN/services/playfab/sdks/c/lifecycle.md)
- [PlayFab Services C/C++ SDK 发行说明](https://docs.xbox.com/zh-CN/services/playfab/release-notes/playfab-c/index.md)
- [PlayFab Multiplayer C++ SDK 发行说明](https://docs.xbox.com/zh-CN/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-and-matchmaking-release-notes.md)
- [XMemFreeDefault](https://docs.xbox.com/zh-CN/reference/system/xmem/functions/xmemfreedefault.md)
- [跨核心内存开销](https://docs.xbox.com/zh-CN/build/console-features/memory/Cross-Core-Memory-Costs.md)
