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

# Utilisation du gestionnaire de mémoire du système d'exploitation de jeu Microsoft GDK

> Utilisation du gestionnaire de mémoire du système d'exploitation de jeu Microsoft GDK

Bien que le fonctionnement interne du gestionnaire de mémoire soit très différent dans le système d'exploitation de jeu Microsoft GDK, les API disponibles pour allouer et gérer la mémoire sont très semblables (mais pas identiques) aux API offertes dans le système d'exploitation ERA de la XBOX One.

## Famille d'API d'allocation de mémoire

### VirtualAlloc/VirtualFree

`VirtualAlloc` et `VirtualFree` sont désormais identiques aux implémentations standard de ces API dans les environnements Windows pour PC. Cela offre un niveau élevé de compatibilité avec tout code existant qui utilise ces API pour obtenir de la mémoire. Dans le système d'exploitation ERA de la XBOX One, `VirtualAlloc` avait été modifiée pour allouer des types de mémoire propres à la XBOX au moyen des indicateurs `MEM_TITLE`, `MEM_GRAPHICS` et `MEM_TOOL`. Ces indicateurs ne sont plus pris en charge. Utilisez plutôt [XMemVirtualAlloc](/fr-CA/reference/system/xmem/functions/xmemvirtualalloc).

### HeapAlloc/HeapFree (et semblables)

Les API liées au tas Win32 sont également identiques à l'implémentation standard de ces API dans les environnements Windows pour PC. Comme `VirtualAlloc`, cela offre un niveau élevé de compatibilité avec le code existant. Fait important, `HeapAlloc` et `HeapFree` sont les API utilisées par les bibliothèques C runtime/VCRuntime pour implémenter `malloc`/`new`/`free`/`delete` et les API de mémoire connexes de la norme C.

Tous les tas Win32 standard utilisent de grandes pages (2 Mo) pour le stockage dorsal afin d'offrir des performances optimales. Le tas subdivise efficacement chaque page de 2 Mo pour répondre aux allocations entrantes, ce qui n'entraîne presque aucune augmentation de l'empreinte mémoire par rapport à un tas Win32 utilisant des pages de 4 Ko. Cela réduit également la fréquence à laquelle le tas Win32 doit effectuer des appels d'API coûteux à `VirtualAlloc` lorsqu'il s'agrandit.

<Note>Dans le système d'exploitation ERA de la XBOX One, `HeapAlloc` avait été modifiée pour accepter l'indicateur `HEAP_TOOL` afin d'obtenir de la mémoire de débogage/étendue au moyen d'un tas Win32. Cet indicateur est déconseillé et, dans une future mise à jour du Microsoft Game Development Kit (GDK), une nouvelle API sera offerte pour remplacer cette fonctionnalité.</Note>

### XMemVirtualAlloc

[XMemVirtualAlloc](/fr-CA/reference/system/xmem/functions/xmemvirtualalloc) est une nouvelle API créée pour le Microsoft Game Development Kit (GDK). Cette API remplace les appels à `VirtualAlloc` qui étaient effectués avec les indicateurs `MEM_TITLE`, `MEM_GRAPHICS` et `MEM_TOOL` dans l'environnement ERA de la XBOX One. Les paramètres et la convention d'appel correspondent étroitement à ceux de `VirtualAlloc`, avec l'ajout d'un nouveau champ `XMemFlags` qui permet à l'appelant d'ajouter des détails supplémentaires (propres à la XBOX) sur le type de mémoire requis.

### XMemAllocatePhysicalPages/XMemMapPhysicalPages/XMemFreePhysicalPages

Vous pouvez utiliser les API de mappage de pages physiques pour obtenir les index des pages physiques en mémoire. L'allocation de pages de cette façon donne au jeu un contrôle total sur la propriété de la RAM. Les numéros de page retournés peuvent être combinés et mappés dans l'espace d'adressage virtuel du jeu au besoin.

Comme dans le système d'exploitation ERA de la XBOX One, chaque numéro de page physique retourné représente 64 Ko de RAM. Des pages individuelles ou des groupes arbitraires de pages peuvent être mappés dans des réservations appropriées créées avec `MEM_64K_PAGES`. Le mappage dans des réservations de 2 Mo est également possible en fournissant des groupes de 32 pages consécutives alignés sur 2 Mo.

Les pages peuvent être mappées plusieurs fois avec des protections de page différentes. Par exemple, un mappage peut être `PAGE_READWRITE` tandis qu'un autre est `PAGE_READONLY`. Toutefois, vous ne pouvez pas mapper une page plusieurs fois avec des attributs de cache différents (`WRITEBACK`, `WRITECOMBINE` ou `UNCACHED`). Toute tentative en ce sens retourne une erreur. Cela n'était pas possible non plus dans ERA de la XBOX One, mais toute tentative échouait silencieusement, donnant l'impression que cela fonctionnait.

<Note>La mémoire virtuelle du système d'exploitation de jeu Microsoft GDK fonctionne comme le système de mémoire de Windows. Si vous allouez deux adresses à l'aide de [XMemVirtualAlloc](/fr-CA/reference/system/xmem/functions/xmemvirtualalloc) qui sont adjacentes dans l'espace d'adressage virtuel, puis que vous tentez de mapper ces pages avec un seul appel à [XMemMapPhysicalPages](/fr-CA/reference/system/xmem/functions/xmemmapphysicalpages), le comportement est indéfini et ne devrait pas fonctionner. Même si elles se trouvent à être adjacentes dans l'espace d'adressage virtuel, il s'agit d'allocations différentes du point de vue du système de mémoire. Il en va de même lorsque vous annulez le mappage des pages.</Note>

### XMemVirtualQuery/XMemGetWorkingSetStatistics

[XMemVirtualQuery](/fr-CA/reference/system/xmem/functions/xmemvirtualquery) et [XMemGetWorkingSetStatistics](/fr-CA/reference/system/xmem/functions/xmemgetworkingsetstatistics) sont des API de diagnostic supplémentaires permettant d'examiner les détails de l'utilisation de la mémoire propres à la XBOX. [XMemVirtualQuery](/fr-CA/reference/system/xmem/functions/xmemvirtualquery) est très semblable à `VirtualQuery`. `XMemVirtualQuery` retourne des informations supplémentaires qui ne sont pas offertes par `VirtualQuery`, notamment la taille de page et la propriété (système ou jeu) de la mémoire. [XMemGetWorkingSetStatistics](/fr-CA/reference/system/xmem/functions/xmemgetworkingsetstatistics) retourne des informations sur l'empreinte mémoire actuellement utilisée.


## Related topics

- [Documentation de développement de jeux XBOX](/fr/index.md)
- [Installer la chaîne d'outils du GDK](/fr/home/setup-install/download-install.md)
- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr-CA/nda/nda-topic-directory.md)
- [Accéder aux ressources et téléchargements du GDK](/fr/home/onboarding-access/access-resources.md)
- [Accéder aux ressources et aux téléchargements du GDK](/fr-CA/home/onboarding-access/access-resources.md)
