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

# XALLOC_ATTRIBUTES

> XALLOC_ATTRIBUTES

# XALLOC\_ATTRIBUTES

Contient des valeurs qui décrivent les attributs d'une allocation de mémoire.

<a id="syntaxSection" />

## Syntaxe

```cpp theme={null}
typedef union _XALLOC_ATTRIBUTES {  
    ULONGLONG Attributes;  
    struct {  
        ULONGLONG ObjectType : 14;  
        ULONGLONG PageSize : 2;  
        ULONGLONG AllocatorId : 8;  
        ULONGLONG Alignment : 5;  
        ULONGLONG MemoryType : 4;  
        ULONGLONG Address32BitMapping : 1;  
        ULONGLONG reserved : 30;  
    } s;  
} XALLOC_ATTRIBUTES, *PXALLOC_ATTRIBUTES;  
```

<a id="membersSection" />

### Membres

*Attributes*\
Type : ULONGLONG

Attributs de l'allocation de mémoire.

*ObjectType*\
Type : ULONGLONG

Type d'allocation, tel que défini par le sous-système qui effectue l'allocation de mémoire. Pour plus d'informations, consultez [ObjectType](#objecttypeSection).

*PageSize*\
Type : ULONGLONG

Taille de page allouée. Pour plus d'informations sur les valeurs autorisées, consultez [PageSize](#pagesizeSection).

*AllocatorId*\
Type : ULONGLONG

ID d'allocateur du sous-système qui effectue l'allocation. Chaque allocation est associée à un ID d'allocateur, qui identifie le sous-système qui demande l'allocation (ou la libération) de mémoire. Il existe trois sources potentielles d'allocations : le titre, la plateforme et les composants middleware. Pour plus d'informations sur les ID d'allocateur, consultez [XALLOC\_ALLOCATOR\_IDS](/fr/reference/system/xmem/enums/xalloc_allocator_ids).

*Alignment*\
Type : ULONGLONG

Type d'alignement requis pour l'allocation. Pour plus d'informations sur les valeurs autorisées, consultez [Alignment](#alignmentSection).

*MemoryType*\
Type : ULONGLONG

Type de mémoire souhaité pour l'allocation. Vous pouvez choisir l'un des différents types de pages visibles par le GPU et comportements de mise en cache, ou des valeurs utiles pour les allocations de mémoire réservées au processeur. Pour plus d'informations sur les valeurs autorisées, consultez [MemoryType](#memorytypeSection).

*Address32BitMapping*\
Type : ULONGLONG

Si la valeur est 1, force l'allocation à obtenir une adresse inférieure à 4 Go (requise par le GPU, par exemple).

*reserved*\
Type : ULONGLONG

Réservé à un usage interne.

<a id="remarksSection" />

## Remarques

Cette structure est utilisée par les définitions de syntaxe [XMEMALLOC\_ROUTINE](/fr/reference/system/xmem/functions/xmemalloc_routine) et [XMEMFREE\_ROUTINE](/fr/reference/system/xmem/functions/xmemfree_routine) pour, respectivement, l'allocation et la désallocation de mémoire.

<Note>
  Le code source de l'implémentation par défaut de [XMemAlloc](/fr/reference/system/xmem/functions/xmemalloc) et de [XMemFree](/fr/reference/system/xmem/functions/xmemfree) est installé avec le Microsoft Game Development Kit (GDK). Pour plus d'informations, consultez les fonctions `XMemAllocDefault` et `XMemFreeDefault` dans `\GXDK\gameKit\Source\amd64\heap.c`.
</Note>

Les sections suivantes fournissent plus d'informations sur les valeurs autorisées et les détails d'allocation.

<a id="objecttypeSection" />

### ObjectType

Les valeurs de *ObjectType* sont définies par l'allocateur qui effectue l'allocation, et votre titre peut utiliser ces valeurs soit pour suivre différents types d'objets au fur et à mesure de leur allocation, soit pour faire varier le comportement de votre allocateur en fonction du type.

Par exemple, si vous avez défini un allocateur pour votre système de particules, vous pouvez définir votre propre ID d'allocateur pour votre titre sous la forme `TitleAllocatorID_ParticleSystem` et lui attribuer la valeur 4, ainsi qu'un pool destiné à contenir les particules qui n'entrent en collision qu'avec le plan du sol dans votre moteur. Ce pool peut avoir l'ID *ObjectType* 2, car vous avez déjà utilisé 0 pour les émetteurs et 1 pour les particules qui entrent en collision. Tout dépend de ce que vous voulez suivre précisément et de la façon dont votre moteur est structuré.

Vous pouvez également ne pas définir d'ID avec une granularité aussi grossière ; vous pouvez plutôt vous appuyer sur l'ID d'allocateur pour différents comportements d'allocation, et utiliser l'ID *ObjectType* uniquement à des fins de suivi, chaque type d'objet de votre jeu ayant sa propre valeur, quel que soit le sous-système.

La valeur de *ObjectType* doit être un entier compris entre 0 et 16383.

<a id="memorytypeSection" />

### MemoryType

Vous pouvez spécifier le type de mémoire à allouer en définissant la valeur de *MemoryType*. Le paramètre *MemoryType* doit être défini sur l'une des valeurs suivantes.

| XALLOC\_MEMTYPE | Valeur | Description |
| :- | :-: | :- |
| XALLOC\_MEMTYPE\_HEAP\_CACHEABLE | 0x0 | Indique que le bloc de mémoire n'a pas besoin d'être visible par le GPU et doit être mis en cache. |
| XALLOC\_MEMTYPE\_GRAPHICS\_WRITECOMBINE | 0x1 | Indique que le bloc de mémoire est mappé dans les tables de pages du GPU et doit se comporter comme de la mémoire à écriture combinée. |
| XALLOC\_MEMTYPE\_GRAPHICS\_WRITECOMBINE\_GPU\_READONLY | 0x2 | Indique que le bloc de mémoire est en lecture seule, qu'il est mappé dans les tables de pages du GPU et qu'il doit se comporter comme de la mémoire à écriture combinée. Cette mémoire n'est pas cohérente avec le cache du GPU. |
| XALLOC\_MEMTYPE\_GRAPHICS\_CACHEABLE | 0x3 | Indique que le bloc de mémoire est mappé dans les tables de pages du GPU, et qu'il doit être mis en cache et cohérent avec le cache du GPU. |
| XALLOC\_MEMTYPE\_GRAPHICS\_CACHEABLE\_NONCOHERENT\_GPU\_READONLY | 0x4 | Indique que le bloc de mémoire est mappé dans les tables de pages du GPU ; bien que mise en cache par le processeur, cette mémoire n'est pas cohérente avec le cache du GPU. Une prudence particulière s'impose avec ce type de mémoire pour éviter de voir des lignes de cache obsolètes sur le processeur ou sur le GPU. |
| XALLOC\_MEMTYPE\_GRAPHICS\_COMMAND\_BUFFER\_WRITECOMBINE | 0x5 | Indique que le bloc de mémoire est destiné à être utilisé comme mémoire tampon de commandes du GPU ou du moteur DMA, et qu'il doit être à écriture combinée. Cette mémoire n'est pas cohérente avec le cache du GPU. |
| XALLOC\_MEMTYPE\_GRAPHICS\_COMMAND\_BUFFER\_CACHEABLE | 0x6 | Indique que le bloc de mémoire est destiné à être utilisé comme mémoire tampon de commandes du GPU ou du moteur DMA, et qu'il doit être mis en cache et cohérent avec le cache du GPU. |
| XALLOC\_MEMTYPE\_PHYSICAL\_CACHEABLE | 0x7 | Indique que le bloc de mémoire est physique et peut être mis en cache. |
| XALLOC\_MEMTYPE\_PHYSICAL\_WRITECOMBINE | 0x8 | Indique que le bloc de mémoire est physique et doit se comporter comme de la mémoire à écriture combinée. |
| XALLOC\_MEMTYPE\_PHYSICAL\_UNCACHED | 0x9 | Indique que le bloc de mémoire est physique et non mis en cache. |
| XALLOC\_MEMTYPE\_GRAPHICS\_GPU\_UNCACHED | 0xA | Indique que le bloc de mémoire est mappé dans les tables de pages du GPU. Le GPU accède à la mémoire sans mise en cache. |
| XALLOC\_MEMTYPE\_GRAPHICS\_SHADER\_CACHEABLE\_NONCOHERENT | 0xB | Indique que le bloc de mémoire est mappé dans les tables de pages du GPU pour l'exécution de nuanceurs (lecture seule). La mémoire n'est pas cohérente avec le cache du GPU. |
| XALLOC\_MEMTYPE\_GRAPHICS\_EXECUTABLE\_WRITECOMBINE | 0xC | Indique que le bloc de mémoire est mappé dans les tables de pages du GPU pour les arguments indirects. La mémoire est à écriture combinée côté processeur, exécutable par le GPU et non cohérente avec le cache du GPU. |

<a id="pagesizeSection" />

### PageSize

Vous pouvez spécifier la taille des pages utilisées dans l'allocation de mémoire en définissant la valeur de *PageSize*. Ce paramètre peut avoir l'une des valeurs indiquées dans le tableau suivant.

| XALLOC\_PAGESIZE | Valeur | Description |
| :- | :-: | :- |
| XALLOC\_PAGESIZE\_4KB | 0 | Allouer à l'aide de pages de 4 Ko. |
| XALLOC\_PAGESIZE\_64KB | 1 | Allouer à l'aide de pages de 64 Ko. |
| XALLOC\_PAGESIZE\_2MB | 2 | Allouer à l'aide de pages de 2 Mo. |

<a id="alignmentSection" />

### Alignment

En définissant la valeur de *Alignment*, votre code demande un alignement spécifique pour le bloc de mémoire renvoyé. Vous pouvez également considérer ce paramètre comme une valeur de 2*n*, où *n* est l'alignement souhaité. Il peut prendre les valeurs indiquées dans le tableau suivant.

<Note>
  L'allocateur par défaut renvoie toujours un alignement minimal de 16 octets.
</Note>

| XALLOC\_ALIGNMENT |
| :- |
| XALLOC\_ALIGNMENT\_ANY |
| XALLOC\_ALIGNMENT\_4 |
| XALLOC\_ALIGNMENT\_16 |
| XALLOC\_ALIGNMENT\_32 |
| XALLOC\_ALIGNMENT\_64 |
| XALLOC\_ALIGNMENT\_128 |
| XALLOC\_ALIGNMENT\_256 |
| XALLOC\_ALIGNMENT\_512 |
| XALLOC\_ALIGNMENT\_1K |
| XALLOC\_ALIGNMENT\_2K |
| XALLOC\_ALIGNMENT\_4K |
| XALLOC\_ALIGNMENT\_8K |
| XALLOC\_ALIGNMENT\_16K |
| XALLOC\_ALIGNMENT\_32K |
| XALLOC\_ALIGNMENT\_64K |
| XALLOC\_ALIGNMENT\_128K |

<a id="suballocationSection" />

### Sous-allocation de mémoire non graphique

La mémoire non graphique (mémoire allouée à l'aide de XALLOC\_MEMTYPE\_HEAP\_CACHEABLE) est sous-allouée en fonction de la taille de page et de l'alignement de l'allocation.

* Taille de page de 4 Ko et alignement sur 16 octets :
  * Les allocations inférieures à 4 Ko sont étroitement regroupées
  * Les allocations supérieures ou égales à 4 Ko sont alignées sur un multiple de 4 Ko
* Taille de page de 64 Ko ou 2 Mo, ou alignement autre que 16 octets :
  * Les allocations \<= 4 Ko sont arrondies au multiple supérieur de 256 octets
  * Les allocations \<= 64 Ko sont arrondies au multiple supérieur de 2 Ko
  * Les allocations \<= 128 Ko sont arrondies à 128 Ko
  * Toutes les autres allocations sont arrondies à une limite de 2 Mo

<a id="requirementsSection" />

## Configuration requise

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

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

<a id="seealsoSection" />

## Voir aussi

[Vue d'ensemble de la mémoire graphique pour le GDK](/fr/build/core-features/graphics/graphics-memory-overview)\
[XALLOC\_ALLOCATOR\_IDS](/fr/reference/system/xmem/enums/xalloc_allocator_ids)\
[XMEMALLOC\_ROUTINE](/fr/reference/system/xmem/functions/xmemalloc_routine)\
[XMEMFREE\_ROUTINE](/fr/reference/system/xmem/functions/xmemfree_routine)\
[XMem](/fr/reference/system/xmem/xmem_members)


## Related topics

- [XALLOC_ALLOCATOR_IDS](/reference/system/xmem/enums/xalloc_allocator_ids.md)
- [XMEMFREE_ROUTINE callback](/reference/system/xmem/functions/xmemfree_routine.md)
- [XMemPreallocateFreeSpace](/reference/system/xmem/functions/xmempreallocatefreespace.md)
