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

# Gestion de la mémoire dans le SDK unifié PlayFab

> Gérez la mémoire dans le SDK unifié PlayFab avec des allocateurs personnalisés PFMemoryHooks, des modèles sûrs de durée de vie de XAsyncBlock et le nettoyage explicite des handles.

Ce guide explique comment la mémoire est gérée dans le SDK unifié PlayFab, y compris les options de personnalisation et les bonnes pratiques pour éviter les fuites de mémoire et garantir une gestion sûre des opérations asynchrones.

## Vue d'ensemble

Le SDK unifié PlayFab offre aux développeurs un contrôle précis de l'utilisation de la mémoire en prenant en charge les **hooks d'allocation personnalisés**, le **nettoyage explicite des ressources** et la **gestion sûre des opérations asynchrones**. Il est ainsi adapté aux environnements hautes performances ou aux ressources limitées, comme les jeux et les plateformes embarquées.

## Allocation de mémoire personnalisée

Le SDK vous permet de définir des fonctions personnalisées d'allocation et de libération de mémoire à l'aide de `PFMemoryHooks`. Vous pouvez ainsi intégrer le SDK à vos systèmes de gestion de la mémoire existants, tels que les arènes, les pools ou les allocateurs propres à une plateforme.

### Définition de hooks de mémoire personnalisés

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

**Remarques :**

* Les hooks doivent être définis **avant** l'appel à `PFServicesInitialize`.
* Ils ne **peuvent pas** être modifiés une fois le SDK initialisé.
* S'ils ne sont pas définis, le SDK utilise par défaut l'allocation standard (`malloc`/`free`).

## Opérations asynchrones

La plupart des appels d'API du SDK sont asynchrones. Chaque appel asynchrone nécessite un `XAsyncBlock` valide qui doit rester en vie pendant toute la durée de la requête.

### Utilisation sûre 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
```

**Bonnes pratiques :**

* N'allouez pas `XAsyncBlock` sur la pile, sauf si vous pouvez garantir sa durée de vie.
* Libérez la propriété s'il est alloué dynamiquement, et effectuez le nettoyage dans le rappel.
* Évitez de capturer des références ou des pointeurs invalidés dans la lambda.

## Nettoyage des ressources

Le SDK utilise des handles (par exemple, `PFEntityHandle`, `PFServiceConfigHandle`) qui **doivent** être fermés explicitement lorsqu'ils ne sont plus nécessaires.

### Fermeture des handles et désinitialisation

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

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

**Important :**

* Fermez toujours les handles PlayFab pour éviter les fuites.
* Attendez la fin de `PFServicesUninitializeAsync` avant l'arrêt.

## Bonnes pratiques

* **Définir les hooks de mémoire tôt** : avant tout autre appel d'API PlayFab.
* **Éviter les fuites de mémoire** : fermez les handles et gérez soigneusement les ressources asynchrones.
* **Utiliser des profileurs de mémoire** : en particulier sur les plateformes aux budgets mémoire serrés.
* **Utiliser des allocateurs en pool** : pour les allocations fréquentes ou critiques en termes de performances.

## Voir aussi

* [Opérations asynchrones](/fr/services/playfab/sdks/unified-sdk/async-model)
* [Gestion de la mémoire](/fr/services/playfab/sdks/unified-sdk/memory-management)
* [Traçage et diagnostics](/fr/services/playfab/sdks/unified-sdk/debug-trace)


## Related topics

- [Traçage de débogage dans le SDK unifié PlayFab](/fr/services/playfab/sdks/unified-sdk/debug-trace.md)
- [Effectuer des appels asynchrones dans le SDK unifié PlayFab](/fr/services/playfab/sdks/unified-sdk/async-model.md)
- [Migrer du SDK autonome PlayFab v1 vers le SDK unifié v2](/fr/services/playfab/sdks/unified-sdk/migrating-from-v1.md)
- [Implémentation de Game Saves avec le GDK d'octobre 2025](/fr/services/playfab/player-progression/game-saves/october-2025-gdk-changes.md)
- [Installer le SDK PlayFab sans les Editor Extensions dans Unity](/fr/services/playfab/sdks/unity3d/installing-unity3d-sdk.md)
