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

# XMemFree

> XMemFree est le rappel de désallocation de mémoire défini par l'application sur XBOX GDK, associé à XMemAlloc pour remplacer le désallocateur de mémoire de titre par défaut.

# XMemFree

Fonction de rappel de désallocation de mémoire définie par l'application qui remplace le désallocateur de mémoire par défaut.

## Syntaxe

```cpp theme={null}
VOID XMemFree(  
         PVOID Address,  
         ULONGLONG Attributes  
)  
```

### Paramètres

*Address*   \_In\_<br />Type : PVOID

Adresse de la mémoire à libérer.

*Attributes*   \_In\_<br />Type : ULONGLONG

Attributs de l'allocation. Pour plus de détails, consultez [XALLOC\_ATTRIBUTES](/fr/reference/system/xmem/structs/xalloc_attributes).

### Valeur renvoyée

Type : VOID

## Remarques

Pour plus d'informations sur la syntaxe des routines d'allocation de mémoire, consultez [XMEMALLOC\_ROUTINE](/fr/reference/system/xmem/functions/xmemalloc_routine).

<Note>
  Le code source de l'implémentation par défaut de **XMemAlloc** et **XMemFree** est installé avec le Microsoft Game Development Kit (GDK). Consultez `\GXDK\gameKit\Source\amd64\heap.c`.
</Note>

<Note>
  Si vous implémentez votre propre fonction **XMemFree**, il est essentiel de ne pas effectuer d'appel au pilote Direct3D 12 depuis celle-ci. En effet, le fonctionnement normal du pilote peut entraîner l'appel de **XMemFree** sans aucune protection contre la récursivité. Cette exigence s'étend au fait de ne pas effectuer d'opérations Release finales sur des objets Direct3D 12, car cela peut entraîner des appels implicites au pilote.
</Note>

Il est important que la valeur du paramètre *Attributes* corresponde à celle qui a été transmise lors de l'appel initial à [XMemAlloc](/fr/reference/system/xmem/functions/xmemalloc). C'est à votre implémentation de déterminer si cette valeur est mise en cache par votre code ou synthétisée en fonction des besoins.

Prenons un scénario dans lequel votre allocateur sous-jacent alloue des blocs contigus de 16 octets alignés sur une limite de 16 octets, mais où vous demandez un bloc de 128 octets aligné sur 64 octets, ce qui est d'ailleurs similaire au tas CRT lorsque l'allocateur de petits objets est désactivé.

Pour traiter cette requête, l'allocateur peut en réalité allouer plus de 128 octets, afin de pouvoir aligner l'adresse pour vous. Ce faisant, il peut stocker la longueur du bloc et l'adresse de début réelle du bloc non aligné dans le bloc de 16 octets qui précède l'adresse qu'il vous renvoie. La seule façon de déterminer correctement si c'est le cas est de disposer des informations complètes du paramètre *Attributes* afin d'identifier l'allocateur utilisé et de remonter correctement la chaîne jusqu'au début réel du bloc alloué.

Une non-correspondance de *Attributes* peut entraîner une corruption, des fuites de mémoire ou d'autres comportements indésirables.

## Configuration requise

**En-tête :** xmem.h

**Bibliothèque :** xmem.lib

**Plateformes prises en charge :** consoles de la famille XBOX One et consoles XBOX Series

## Voir aussi

[Référence XMem](/fr/reference/system/xmem/xmem_members)<br />[XMEMALLOC\_ROUTINE](/fr/reference/system/xmem/functions/xmemalloc_routine)<br />[XALLOC\_ATTRIBUTES](/fr/reference/system/xmem/structs/xalloc_attributes)<br />[XMemAlloc](/fr/reference/system/xmem/functions/xmemalloc)<br />[XMemFreeDefault](/fr/reference/system/xmem/functions/xmemfreedefault)


## Related topics

- [XMEMFREE_ROUTINE callback](/reference/system/xmem/functions/xmemfree_routine.md)
- [XMEM_ALLOCATION_HOOKS](/reference/system/xmem/structs/xmem_allocation_hooks.md)
- [XMEMALLOC_ROUTINE callback](/reference/system/xmem/functions/xmemalloc_routine.md)
