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.
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. CommeVirtualAlloc, 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.
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é.XMemVirtualAlloc
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 avecMEM_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.
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 qui sont adjacentes dans l’espace d’adressage virtuel, puis que vous 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 permettant d’examiner les détails de l’utilisation de la mémoire propres à la XBOX. 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 retourne des informations sur l’empreinte mémoire actuellement utilisée.