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

# 内存钩子

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

# 管理内存分配

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

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

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

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

```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**](/services/playfab/api-references/c/pfservices/functions/pfservicesuninitializeasync) 回收与 PlayFab Services 关联的所有资源。
  * 调用 [**PFUninitializeAsync**](/services/playfab/api-references/c/pfcore/functions/pfuninitializeasync) 回收与 PlayFab Core 关联的所有资源。
  * 清理你的游戏自定义内存管理器。

## 参考

[API 参考文档](/services/playfab/api-references/c/pfplatform/pfplatform_members)


## Related topics

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