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

# Administración de memoria en el SDK unificado de PlayFab

> Administre la memoria en el SDK unificado de PlayFab con asignadores personalizados de PFMemoryHooks, patrones seguros de duración de XAsyncBlock y limpieza explícita de identificadores.

Esta guía explica cómo se administra la memoria en el SDK unificado de PlayFab, incluidas las opciones de personalización y los procedimientos recomendados para evitar pérdidas de memoria y garantizar un manejo seguro de las operaciones asincrónicas.

## Información general

El SDK unificado de PlayFab ofrece a los desarrolladores un control preciso sobre el uso de memoria al admitir **enlaces de asignación personalizados**, **limpieza explícita de recursos** y **manejo seguro de operaciones asincrónicas**. Esto lo hace adecuado para entornos de alto rendimiento o con recursos limitados, como juegos y plataformas integradas.

## Asignación de memoria personalizada

El SDK le permite definir funciones personalizadas de asignación y liberación de memoria mediante `PFMemoryHooks`. Esto le permite integrar el SDK en sus sistemas de administración de memoria existentes, como arenas, grupos o asignadores específicos de la plataforma.

### Establecimiento de enlaces de memoria 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
```

**Notas:**

* Los enlaces deben establecerse **antes** de llamar a `PFServicesInitialize`.
* **No se pueden** cambiar una vez inicializado el SDK.
* Si no se establecen, el SDK usa de forma predeterminada la asignación estándar (`malloc`/`free`).

## Operaciones asincrónicas

La mayoría de las llamadas a la API en el SDK son asincrónicas. Cada llamada asincrónica requiere un `XAsyncBlock` válido que debe permanecer activo mientras dure la solicitud.

### Uso seguro de `XAsyncBlock`

```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
```

**Procedimientos recomendados:**

* No asigne `XAsyncBlock` en la pila a menos que pueda garantizar su duración.
* Libere la propiedad si se asigna dinámicamente y realice la limpieza en la devolución de llamada.
* Evite capturar referencias o punteros invalidados en la expresión lambda.

## Limpieza de recursos

El SDK usa identificadores (por ejemplo, `PFEntityHandle`, `PFServiceConfigHandle`) que **deben** cerrarse explícitamente cuando ya no se necesiten.

### Cierre de identificadores y desinicialización

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

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

**Importante:**

* Cierre siempre los identificadores de PlayFab para evitar pérdidas.
* Espere a que `PFServicesUninitializeAsync` se complete antes de cerrar.

## Procedimientos recomendados

* **Establezca los enlaces de memoria pronto**: antes de cualquier otra llamada a la API de PlayFab.
* **Evite las pérdidas de memoria**: cierre los identificadores y administre los recursos asincrónicos con cuidado.
* **Use generadores de perfiles de memoria**: especialmente en plataformas con presupuestos de memoria ajustados.
* **Use asignadores agrupados**: para asignaciones frecuentes o críticas para el rendimiento.

## Consulte también

* [Operaciones asincrónicas](/services/playfab/sdks/unified-sdk/async-model)
* [Administración de memoria](/services/playfab/sdks/unified-sdk/memory-management)
* [Seguimiento y diagnóstico](/services/playfab/sdks/unified-sdk/debug-trace)


## Related topics

- [SDK unificado de PlayFab](/es/services/playfab/sdks/unified-sdk/overview.md)
- [Seguimiento de depuración en el SDK unificado de PlayFab](/es/services/playfab/sdks/unified-sdk/debug-trace.md)
- [Realización de llamadas asincrónicas en el SDK unificado de PlayFab](/es/services/playfab/sdks/unified-sdk/async-model.md)
- [Implementación de Game Saves con el GDK de octubre de 2025](/es/services/playfab/player-progression/game-saves/october-2025-gdk-changes.md)
- [Migrar del SDK independiente v1 de PlayFab al SDK unificado v2](/es/services/playfab/sdks/unified-sdk/migrating-from-v1.md)
