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

# XMemAllocDefault

> XMemAllocDefault est la routine d'allocation de mémoire intégrée de XBOX GDK utilisée lorsqu'un titre n'a pas fourni de rappel XMemAlloc personnalisé.

# XMemAllocDefault

La routine d'allocation de mémoire par défaut.

## Syntaxe

```cpp theme={null}
PVOID XMemAllocDefault(
                SIZE_T Size,
                ULONGLONG Attributes
)
```

### Paramètres

*Size*    Type : SIZE\_T

\[in] Taille du bloc de mémoire demandé.

*Attributes*<br />Type : ULONGLONG

\[in] Attributs de l'allocation. Reportez-vous à [XALLOC\_ATTRIBUTES](/fr-CA/reference/system/xmem/structs/xalloc_attributes)

**Valeur de retour**

Type : PVOID

Retourne un pointeur vers le bloc de mémoire alloué.

**Remarques**

Deux fonctions par défaut sont exportées par le système : *XMemAllocDefault* et [*XMemFreeDefault*](/fr-CA/reference/system/xmem/functions/xmemfreedefault). Elles représentent les valeurs initiales des crochets d'allocation. Si les titres choisissent de ne pas fournir leurs propres crochets d'allocation, ces allocateurs système par défaut seront utilisés à la place. Si les titres souhaitent fournir des crochets d'allocation à des fins de suivi, mais ne veulent pas implémenter leur propre allocateur, ils peuvent appeler directement l'allocateur par défaut.

XMemAllocDefault prend les mêmes paramètres que [*XMemAlloc*](/fr-CA/reference/system/xmem/functions/xmemalloc). Elle fournit l'implémentation du système d'exploitation de [*XMemAlloc*](/fr-CA/reference/system/xmem/functions/xmemalloc) pour les titres qui ne veulent pas intercepter ce comportement, ou qui veulent revenir au comportement par défaut pour les cas qu'ils ne gèrent pas.

La plateforme XBOX achemine toutes les allocations de mémoire de titre qu'elle effectue par [*XMemAlloc*](/fr-CA/reference/system/xmem/functions/xmemalloc), ce qui donne aux développeurs la possibilité de surveiller ou de gérer les besoins en mémoire de la plateforme. Les titres peuvent fournir leurs propres gestionnaires de mémoire pour une partie ou la totalité des demandes qui passent par [*XMemAlloc*](/fr-CA/reference/system/xmem/functions/xmemalloc). Pour le reste, l'API **XMemAllocDefault** est utilisée. **XMemAllocDefault** traite les demandes d'allocation au moyen de l'un de trois mécanismes : HeapAlloc, VirtualAlloc ou une série de tas gérés en interne. Le choix du mécanisme parmi ces trois dépend du type et des exigences d'alignement de l'allocation.

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/reference/xmemallocdefault.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=08575c187c5f1f55e3f2d615628e570e" alt="Diagramme montrant que XMemAllocDefault sert d'interface vers HeapAlloc, VirtualAlloc et les tas Xmem" width="562" height="220" data-path="images/gdk/reference/xmemallocdefault.png" />

Chaque allocation de type **XALLOC\_MEMTYPE\_HEAP\_CACHEABLE** sera dirigée vers **HeapAlloc** tant qu'elle spécifie un alignement \<= 16 octets et une taille de page de 4 Ko.

Les allocations de type **XALLOC\_MEMTYPE\_PHYSICAL\_**\*, ou qui nécessitent une adresse 32 bits, ou qui sont > 128 Ko, ou qui nécessitent un alignement >= 64 Ko seront dirigées vers [*XMemVirtualAlloc*](/fr-CA/reference/system/xmem/functions/xmemvirtualalloc).

Les allocations qui spécifient **XALLOC\_PAGESIZE\_2MB\_**\* seront dirigées vers [*XMemVirtualAlloc*](/fr-CA/reference/system/xmem/functions/xmemvirtualalloc).

Les allocations de type **XALLOC\_MEMTYPE\_GRAPHICS\_**\* seront promues à une taille de page minimale de 64 Ko.

Sinon, l'allocation sera gérée par le tas interne de **XMemAllocDefault**. Il existe deux tas pour chacun des 15 types d'allocation documentés : l'un gère les allocations \< 4 Ko avec un alignement \<= 4 Ko (le tas de « petits blocs ») et l'autre gère toutes les autres allocations (le tas de « grands blocs »). Cela donne un total de 30 tas.

**Détails des tas de XMemAllocDefault**

* Un tas est créé à la demande; ainsi, s'il n'y a aucune allocation d'un type particulier pour une taille grande/petite donnée, le tas ne sera jamais créé.
* Chaque tas réserve 2 Go d'espace d'adressage virtuel. Par conséquent, il ne peut y avoir plus de 2 Go d'allocations pour un tas donné.
* Si un tas est configuré pour utiliser des pages de 2 Mo, chaque tas validera des pages de 2 Mo au besoin; ainsi, chaque allocation sera satisfaite à partir d'une page de 2 Mo, même si des pages de 64 Ko sont demandées.  Par défaut, les tas qui utilisent des pages de 2 Mo sont autorisés à rétrograder vers des pages de 64 Ko si le système a épuisé les pages de 2 Mo.  Ce comportement de rétrogradation peut être désactivé en utilisant `eXMEMOPT_XMEMALLOCDEFAULT_DISABLEPAGESIZEDEMOTION` avec [*XMemSetOption*](/fr-CA/reference/system/xmem/functions/xmemsetoption).
* Si un tas est configuré pour utiliser des pages de 64 Ko, chaque tas validera 512 Ko de pages au besoin.
* Chaque tas est monothread; ainsi, les demandes simultanées d'allocation ou de libération provenant de plusieurs threads seront sérialisées. La sérialisation n'est requise qu'à l'intérieur de chaque tas individuel; ainsi, des demandes simultanées provenant de tas différents peuvent être traitées simultanément.
* Chaque tas tente de regrouper les allocations aussi densément que possible (tout en respectant les contraintes d'alignement) afin de réduire au minimum la quantité de mémoire requise pour prendre en charge le tas.
* Chaque tas peut spécifier sa propre hystérésis d'allocation, qui détermine avec quelle agressivité la mémoire sera rendue au système d'exploitation lorsqu'elle a été libérée. Par défaut, chaque tas graphique spécifie une hystérésis de 64 Mo, et les tas **XALLOC\_MEMTYPE\_HEAP\_CACHEABLE** spécifient 8 Mo (il est peu probable que ceux-ci soient utilisés, puisque les allocations de tas pouvant être mises en cache ne spécifient généralement pas d'exigence d'alignement > 16 octets). Si l'hystérésis est définie à 64 Mo, cela signifie que le tas devra accumuler 64 Mo de pages libres avant que des pages libres soient rendues au système d'exploitation. Cela garantit que le code du tas n'aura jamais besoin de revenir au système d'exploitation tant que la quantité de mémoire requise fluctue à l'intérieur de la valeur d'hystérésis.
* Les tas démarrent sans mémoire validée et demandent de la mémoire au système d'exploitation à la demande. Cependant, un tas peut préallouer de la mémoire auprès du système d'exploitation, si désiré, en appelant [*XMemPreallocateFreeSpace*](/fr-CA/reference/system/xmem/functions/xmempreallocatefreespace) pour ce tas. Cela porte effectivement la réserve de pages libres jusqu'à la limite d'hystérésis de ce tas.

**Voir aussi**

[*xmem\_set\_allocation\_hooks*](/fr-CA/reference/system/xmem/macros/xmem_set_allocation_hooks)

[*xmem\_allocation\_hooks*](/fr-CA/reference/system/xmem/structs/xmem_allocation_hooks)


## Related topics

- [XMemFreeDefault](/fr-CA/reference/system/xmem/functions/xmemfreedefault.md)
- [Rappel XMEMALLOC_ROUTINE](/fr-CA/reference/system/xmem/functions/xmemalloc_routine.md)
- [XMemSetOption](/fr-CA/reference/system/xmem/functions/xmemsetoption.md)
- [XMEM_OPTIONS](/fr-CA/reference/system/xmem/enums/xmem_options.md)
- [XMemSetAllocationHooks](/fr-CA/reference/system/xmem/functions/xmemsetallocationhooks.md)
