XMemAllocDefault
La routine d’allocation de mémoire par défaut.Syntaxe
Paramètres
Size Type : SIZE_T [in] Taille du bloc de mémoire demandé. AttributesType : ULONGLONG [in] Attributs de l’allocation. Consultez XALLOC_ATTRIBUTES Valeur renvoyée Type : PVOID Renvoie un pointeur vers le bloc de mémoire alloué. Remarques Deux fonctions par défaut sont exportées par le système : XMemAllocDefault et XMemFreeDefault. Elles représentent les valeurs initiales des hooks d’allocation. Si les titres choisissent de ne pas fournir leurs propres hooks d’allocation, ces allocateurs système par défaut sont utilisés à la place. Si les titres souhaitent fournir des hooks d’allocation à des fins de suivi, sans pour autant implémenter leur propre allocateur, ils peuvent appeler directement l’allocateur par défaut. XMemAllocDefault prend les mêmes paramètres que XMemAlloc. Elle fournit l’implémentation du système d’exploitation de XMemAlloc pour les titres qui ne souhaitent pas intercepter ce comportement, ou qui souhaitent revenir au comportement par défaut pour les cas qu’ils ne gèrent pas. La plateforme XBOX fait passer toutes les allocations de mémoire de titre qu’elle effectue par XMemAlloc, ce qui permet aux développeurs de surveiller ou de gérer les besoins en mémoire de la plateforme. Les titres peuvent fournir leurs propres gestionnaires de mémoire pour tout ou partie des requêtes qui passent par XMemAlloc. Pour le reste, l’API XMemAllocDefault est utilisée. XMemAllocDefault traite les requêtes d’allocation au moyen de l’un des trois mécanismes suivants : HeapAlloc, VirtualAlloc ou une série de tas gérés en interne. Le choix entre ces trois mécanismes dépend du type et des exigences d’alignement de l’allocation.

- Un tas est créé à la demande ; ainsi, s’il n’y a aucune allocation d’un type particulier pour une taille grande/petite donnée, le tas ne sera jamais créé.
- Chaque tas réserve 2 Go d’espace d’adressage virtuel. Par conséquent, un tas donné ne peut pas contenir plus de 2 Go d’allocations.
- Si un tas est configuré pour utiliser des pages de 2 Mo, chaque tas valide des pages de 2 Mo selon les besoins ; chaque allocation est donc satisfaite à partir d’une page de 2 Mo, même si des pages de 64 Ko sont demandées. Par défaut, les tas qui utilisent des pages de 2 Mo sont autorisés à rétrograder vers des pages de 64 Ko si le système a épuisé les pages de 2 Mo. Ce comportement de rétrogradation peut être désactivé en utilisant
eXMEMOPT_XMEMALLOCDEFAULT_DISABLEPAGESIZEDEMOTIONavec XMemSetOption. - Si un tas est configuré pour utiliser des pages de 64 Ko, chaque tas valide 512 Ko de pages selon les besoins.
- Chaque tas est monothread ; les requêtes d’allocation et/ou de libération simultanées provenant de plusieurs threads sont donc sérialisées. La sérialisation n’est requise qu’au sein de chaque tas individuel ; les requêtes simultanées provenant de tas différents peuvent donc être traitées simultanément.
- Chaque tas tente de regrouper les allocations aussi densément que possible (tout en respectant les contraintes d’alignement) afin de réduire la quantité de mémoire nécessaire au fonctionnement du tas.
- Chaque tas peut spécifier sa propre hystérésis d’allocation, qui détermine avec quelle rapidité la mémoire est rendue au système d’exploitation lorsqu’elle a été libérée. Par défaut, chaque tas graphique spécifie une hystérésis de 64 Mo, et les tas XALLOC_MEMTYPE_HEAP_CACHEABLE spécifient 8 Mo (il est peu probable que ceux-ci soient jamais utilisés, car les allocations de tas pouvant être mises en cache ne spécifient généralement pas d’exigence d’alignement > 16 octets). Si l’hystérésis est définie sur 64 Mo, cela signifie que le tas doit accumuler 64 Mo de pages libres avant que des pages libres ne soient rendues au système d’exploitation. Cela garantit que le code du tas n’aura jamais besoin de solliciter à nouveau le système d’exploitation tant que la quantité de mémoire requise fluctue dans les limites de l’hystérésis.
- Les tas démarrent sans mémoire validée et demandent de la mémoire au système d’exploitation à la demande. Toutefois, un tas peut préallouer de la mémoire auprès du système d’exploitation si vous le souhaitez, en appelant XMemPreallocateFreeSpace pour ce tas. Cela porte en pratique la réserve de pages libres jusqu’à la limite d’hystérésis de ce tas.
