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

# PFMemAllocFunction

> 在游戏使用 PFMemSetFunctions 安装自定义内存挂钩后，PlayFab 调用此回调来分配指定大小的内存缓冲区。

每当 PlayFab 需要动态分配内存缓冲区时调用的回调。

## 语法

```cpp theme={null}
void* STDAPIVCALLTYPE PFMemAllocFunction(
    size_t size,
    uint32_t memoryTypeId
);
```

### 参数

**`size`**   `_In_` size\_t

要分配的大小（以字节为单位）。此值永远不会为零。

**`memoryTypeId`**   `_In_` uint32\_t

正在分配的内存的内部类别的不透明标识符。请忽略此值。

### 返回值

类型：void\*

指向已分配的指定大小内存块的指针；如果分配失败，则为 `nullptr`。头文件使用 `_Ret_maybenull_` 和 `_Post_writable_byte_size_(size)` 对返回值进行批注。

## 备注

若要安装此回调，请在 [PFMemoryHooks](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/structs/pfmemoryhooks.md) 结构的 `alloc` 成员中设置它，并在调用 [PFInitialize](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfcore/functions/pfinitialize.md) 之前将该结构传递给 [PFMemSetFunctions](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/functions/pfmemsetfunctions.md)。同时将 `free` 成员设置为匹配的 [PFMemFreeFunction](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/functions/pfmemfreefunction.md) 回调。如果只设置了这两个成员中的一个，PFMemSetFunctions 将返回 `E_INVALIDARG`。

回调必须返回一个指向所请求大小的连续内存块的指针。该内存块必须保持有效，直到 PlayFab 将其传递给你的 PFMemFreeFunction 回调。当 PlayFab 不再需要内存时，会将此回调返回的每个非 null 指针传递给你的 PFMemFreeFunction 回调。

如果在调用 PFMemSetFunctions 时 libHttpClient 尚未初始化，PlayFab 还会安装挂钩，使 libHttpClient 的分配也通过此回调进行。

若要获取当前正在使用的挂钩（包括默认挂钩），请调用 [PFMemGetFunctions](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/functions/pfmemgetfunctions.md)。

PlayFab 可能从不同的线程调用此回调，因此请确保它是线程安全的。

## 要求

**头文件：** PFPlatform.h

**库：** PlayFabCore.lib

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

## 另请参阅

[PFPlatform 成员](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/pfplatform_members.md)

[PFMemoryHooks](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/structs/pfmemoryhooks.md)

[PFMemFreeFunction](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/functions/pfmemfreefunction.md)


## Related topics

- [PFMemFreeFunction](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/functions/pfmemfreefunction.md)
- [PFMemoryHooks](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/structs/pfmemoryhooks.md)
- [服务 C API 概览 - PFPlatform.h](https://docs.xbox.com/zh-CN/services/playfab/api-references/c/pfplatform/pfplatform_members.md)
- [HCMemAllocFunction](https://docs.xbox.com/zh-CN/reference/live/httpclient/httpclient/functions/hcmemallocfunction.md)
- [XblMemAllocFunction](https://docs.xbox.com/zh-CN/reference/live/xsapi-c/xbox_live_global_c/functions/xblmemallocfunction.md)
