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

# Gerenciamento de memória no SDK unificado do PlayFab

> Gerencie a memória no SDK unificado do PlayFab com alocadores personalizados PFMemoryHooks, padrões seguros de tempo de vida do XAsyncBlock e limpeza explícita de identificadores.

Este guia explica como a memória é gerenciada no SDK unificado do PlayFab, incluindo opções de personalização e práticas recomendadas para evitar vazamentos de memória e garantir o tratamento seguro de operações assíncronas.

## Visão geral

O SDK unificado do PlayFab dá aos desenvolvedores controle preciso sobre o uso de memória, oferecendo suporte a **hooks de alocação personalizados**, **limpeza explícita de recursos** e **tratamento seguro de operações assíncronas**. Isso o torna adequado para ambientes de alto desempenho ou com recursos limitados, como jogos e plataformas embarcadas.

## Alocação de memória personalizada

O SDK permite definir funções personalizadas de alocação e desalocação de memória usando `PFMemoryHooks`. Isso permite integrar o SDK aos seus sistemas de gerenciamento de memória existentes, como arenas, pools ou alocadores específicos da plataforma.

### Definindo hooks de memória personalizados

```cpp theme={null}
void* MyCustomAlloc(size_t size, uint32_t memoryTypeId);
void MyCustomFree(void* ptr, uint32_t memoryTypeId);

PFMemoryHooks memoryHooks = { MyCustomAlloc, MyCustomFree };
PFMemSetFunctions(&memoryHooks);
PFServicesInitialize(nullptr); // Must be called after setting memory hooks
```

**Observações:**

* Os hooks precisam ser definidos **antes** de chamar `PFServicesInitialize`.
* Eles **não podem** ser alterados depois que o SDK é inicializado.
* Se não forem definidos, o SDK usará a alocação padrão (`malloc`/`free`).

## Operações assíncronas

A maioria das chamadas à API no SDK é assíncrona. Cada chamada assíncrona exige um `XAsyncBlock` válido, que precisa permanecer ativo durante toda a requisição.

### Usando o `XAsyncBlock` com segurança

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->callback = [](XAsyncBlock* block)
{
    // Retrieve result, then delete asyncBlock if needed
};
StartAsyncPlayFabCall(asyncBlock.get());
asyncBlock.release(); // Ownership passed; handle lifetime carefully
```

**Práticas recomendadas:**

* Não aloque o `XAsyncBlock` na pilha, a menos que possa garantir seu tempo de vida.
* Libere a propriedade se ele for alocado dinamicamente e faça a limpeza no callback.
* Evite capturar referências ou ponteiros invalidados na lambda.

## Limpeza de recursos

O SDK usa identificadores (por exemplo, `PFEntityHandle`, `PFServiceConfigHandle`) que **precisam** ser fechados explicitamente quando não forem mais necessários.

### Fechando identificadores e desinicializando

```cpp theme={null}
PFEntityCloseHandle(entityHandle);
PFServiceConfigCloseHandle(serviceConfigHandle);

// Gracefully uninitialize the SDK
XAsyncBlock async{};
PFServicesUninitializeAsync(&async);
XAsyncGetStatus(&async, true); // Blocks until cleanup completes
```

**Importante:**

* Sempre feche os identificadores do PlayFab para evitar vazamentos.
* Aguarde a conclusão de `PFServicesUninitializeAsync` antes de encerrar.

## Práticas recomendadas

* **Defina os hooks de memória cedo**: antes de qualquer outra chamada à API do PlayFab.
* **Evite vazamentos de memória**: feche os identificadores e gerencie os recursos assíncronos com cuidado.
* **Use criadores de perfil de memória**: especialmente em plataformas com orçamentos de memória apertados.
* **Use alocadores em pool**: para alocações frequentes ou críticas para o desempenho.

## Confira também

* [Operações assíncronas](/pt-BR/services/playfab/sdks/unified-sdk/async-model)
* [Gerenciamento de memória](/pt-BR/services/playfab/sdks/unified-sdk/memory-management)
* [Rastreamento e diagnóstico](/pt-BR/services/playfab/sdks/unified-sdk/debug-trace)


## Related topics

- [SDK unificado do PlayFab](/pt-BR/services/playfab/sdks/unified-sdk/overview.md)
- [Rastreamento de depuração no SDK unificado do PlayFab](/pt-BR/services/playfab/sdks/unified-sdk/debug-trace.md)
- [Fazendo chamadas assíncronas no SDK unificado do PlayFab](/pt-BR/services/playfab/sdks/unified-sdk/async-model.md)
- [Migrar do SDK autônomo v1 do PlayFab para o SDK unificado v2](/pt-BR/services/playfab/sdks/unified-sdk/migrating-from-v1.md)
- [Produtos de SDK do PlayFab](/pt-BR/services/playfab/sdks/sdk-products.md)
