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

Les attributs de l'allocation de mémoire.

*ObjectType*\
Type : ULONGLONG

Le 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

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

*AllocatorId*\
Type : ULONGLONG

L'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 intergiciels. Pour plus d'informations sur les ID d'allocateur, consultez [XALLOC\_ALLOCATOR\_IDS](/fr-CA/reference/system/xmem/enums/xalloc_allocator_ids).

*Alignment*\
Type : ULONGLONG

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

*MemoryType*\
Type : ULONGLONG

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

*Address32BitMapping*\
Type : ULONGLONG

S'il est défini à 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-CA/reference/system/xmem/functions/xmemalloc_routine) et [XMEMFREE\_ROUTINE](/fr-CA/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-CA/reference/system/xmem/functions/xmemalloc) et de [XMemFree](/fr-CA/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 selon le type.

Par exemple, si vous avez défini un allocateur pour votre système de particules, vous pourriez définir votre propre ID d'allocateur pour votre titre sous le nom `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 pourrait avoir l'ID *ObjectType* 2, puisque 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 aussi ne pas définir d'ID avec une granularité aussi grossière; vous pourriez plutôt vous baser sur l'ID d'allocateur pour obtenir 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 à 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 qu'il 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 qu'il 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 et que, bien qu'elle soit mise en cache par le CPU, cette mémoire n'est pas cohérente avec le cache du GPU. Une prudence accrue est nécessaire avec ce type de mémoire pour éviter de voir des lignes de cache périmées sur le CPU ou 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 qu'il 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. La mémoire est accédée sans mise en cache par le GPU. |
| 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 des 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 pour le CPU, 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 précis pour le bloc de mémoire retourné. Vous pouvez également considérer ce paramètre comme une valeur de 2*n*, où *n* est l'alignement souhaité. Il peut avoir les valeurs indiquées dans le tableau suivant.

<Note>
  L'allocateur par défaut retourne 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 de 16 octets :
  * Les allocations inférieures à 4 Ko sont regroupées de manière compacte
  * Les allocations supérieures ou égales à 4 Ko sont alignées sur un multiple de 4 Ko
* Taille de page de 64 Ko ou de 2 Mo, ou alignement autre que 16 octets :
  * Les allocations \<= 4 Ko sont arrondies au multiple de 256 octets supérieur
  * Les allocations \<= 64 Ko sont arrondies au multiple de 2 Ko supérieur
  * 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-CA/build/core-features/graphics/graphics-memory-overview)\
[XALLOC\_ALLOCATOR\_IDS](/fr-CA/reference/system/xmem/enums/xalloc_allocator_ids)\
[XMEMALLOC\_ROUTINE](/fr-CA/reference/system/xmem/functions/xmemalloc_routine)\
[XMEMFREE\_ROUTINE](/fr-CA/reference/system/xmem/functions/xmemfree_routine)\
[XMem](/fr-CA/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)
