Skip to main content
Bien que les mécanismes internes du gestionnaire de mémoire soient très différents dans le système d’exploitation de jeu Microsoft GDK, les API disponibles pour allouer et gérer la mémoire sont très similaires (mais pas identiques) aux API disponibles dans le système d’exploitation ERA de 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 PC. Cela offre un haut degré de compatibilité avec tout code existant qui utilise ces API pour obtenir de la mémoire. Dans le système d’exploitation ERA de XBOX One, VirtualAlloc avait été modifiée pour allouer des types de mémoire propres à XBOX via les indicateurs MEM_TITLE, MEM_GRAPHICS et MEM_TOOL. Ces indicateurs ne sont plus pris en charge. Utilisez plutôt XMemVirtualAlloc.

HeapAlloc/HeapFree (et similaires)

Les API liées au tas Win32 sont également identiques à l’implémentation standard de ces API dans les environnements Windows PC. Comme pour VirtualAlloc, cela offre un haut degré de compatibilité avec le code existant. Il est important de noter que 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 standard C associées. Tous les tas Win32 standard utilisent de grandes pages (2 Mo) pour le stockage back-end afin d’offrir des performances optimales. Le tas subdivise efficacement chaque page de 2 Mo pour satisfaire les allocations entrantes, ce qui n’entraîne pratiquement aucune augmentation de l’empreinte mémoire par rapport à un tas Win32 sur 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.
Dans le système d’exploitation ERA de XBOX One, HeapAlloc avait été modifiée pour accepter l’indicateur HEAP_TOOL afin d’obtenir de la mémoire de débogage/étendue via un tas Win32. Cet indicateur est déprécié et, dans une future mise à jour du Microsoft Game Development Kit (GDK), une nouvelle API sera disponible pour remplacer cette fonctionnalité.

XMemVirtualAlloc

XMemVirtualAlloc est une nouvelle API créée pour le Microsoft Game Development Kit (GDK). Cette API remplace les appels à VirtualAlloc effectués avec les indicateurs MEM_TITLE, MEM_GRAPHICS et MEM_TOOL dans l’environnement ERA de 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 à 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 manière donne au jeu un contrôle total sur la propriété de la RAM. Les numéros de page renvoyés peuvent être combinés et mappés dans l’espace d’adressage virtuel du jeu selon les besoins. Comme dans le système d’exploitation ERA de XBOX One, chaque numéro de page physique renvoyé 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 renvoie une erreur. Cela n’était pas non plus possible dans ERA de XBOX One, bien que toute tentative échouait silencieusement, donnant l’impression que l’opération avait réussi.
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 adjacentes dans l’espace d’adressage virtuel à l’aide de XMemVirtualAlloc, puis tentez de mapper ces pages avec un seul appel à 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.

XMemVirtualQuery/XMemGetWorkingSetStatistics

XMemVirtualQuery et XMemGetWorkingSetStatistics sont des API de diagnostic supplémentaires disponibles pour examiner les détails d’utilisation de la mémoire propres à XBOX. XMemVirtualQuery est très similaire à VirtualQuery. XMemVirtualQuery renvoie des informations supplémentaires non disponibles avec VirtualQuery, notamment la taille de page et la propriété (système ou jeu) de la mémoire. XMemGetWorkingSetStatistics renvoie des informations sur l’empreinte mémoire actuellement utilisée.
Last modified on October 6, 2026