Skip to main content
Aunque los aspectos internos del administrador de memoria son muy diferentes en el sistema operativo de juego del Microsoft GDK, las API disponibles para asignar y administrar la memoria son muy similares (aunque no idénticas) a las API disponibles en el sistema operativo de la era XBOX One.

Familia de API de asignación de memoria

VirtualAlloc/VirtualFree

VirtualAlloc y VirtualFree ahora son idénticas a las implementaciones estándar de estas API en entornos de equipos con Windows. Esto proporciona un alto grado de compatibilidad con cualquier código existente que use estas API para obtener memoria. En el sistema operativo de la era XBOX One, VirtualAlloc se modificó para asignar tipos de memoria específicos de XBOX mediante las marcas MEM_TITLE, MEM_GRAPHICS y MEM_TOOL. Estas marcas ya no se admiten. En su lugar, use XMemVirtualAlloc.

HeapAlloc/HeapFree (y similares)

Las API relacionadas con el montón Win32 también son idénticas a la implementación estándar de estas API en entornos de equipos con Windows. Al igual que VirtualAlloc, esto proporciona un alto grado de compatibilidad con el código existente. Es importante destacar que HeapAlloc y HeapFree son las API que usan las bibliotecas del entorno de ejecución de C/VCRuntime para implementar malloc/new/free/delete y las API de memoria estándar de C relacionadas. Todos los montones Win32 estándar usan páginas grandes (de 2 MB) como almacenamiento de back-end para proporcionar un rendimiento óptimo. El montón subdivide de manera eficiente cada página de 2 MB para satisfacer las asignaciones entrantes y prácticamente no aumenta la superficie de memoria en comparación con un montón Win32 sobre páginas de 4 KB. Esto también reduce la frecuencia con la que el montón Win32 debe realizar costosas llamadas a la API VirtualAlloc a medida que se expande.
En el sistema operativo de la era XBOX One, HeapAlloc se modificó para aceptar la marca HEAP_TOOL a fin de obtener memoria de depuración/extendida a través de un montón Win32. Esta marca se ha marcado como obsoleta y, en una actualización futura del Microsoft Game Development Kit (GDK), habrá disponible una nueva API para reemplazar esta funcionalidad.

XMemVirtualAlloc

XMemVirtualAlloc es una nueva API creada para el Microsoft Game Development Kit (GDK). Esta API reemplaza el uso de las llamadas a VirtualAlloc que se realizaban con las marcas MEM_TITLE, MEM_GRAPHICS y MEM_TOOL en el entorno de la era XBOX One. Los parámetros y la convención de llamada coinciden estrechamente con los de VirtualAlloc, con la adición de un nuevo campo XMemFlags que permite al autor de la llamada agregar más detalles (específicos de XBOX) sobre el tipo de memoria que se requiere.

XMemAllocatePhysicalPages/XMemMapPhysicalPages/XMemFreePhysicalPages

Puede usar las API de mapeo de páginas físicas para obtener índices de páginas físicas en memoria. Asignar páginas de esta manera proporciona al juego un control total sobre la propiedad de la RAM. Los números de página que se devuelven se pueden combinar y asignar al espacio de direcciones virtuales del juego según sea necesario. Al igual que en el sistema operativo de la era XBOX One, cada número de página física que se devuelve representa 64 KB de RAM. Las páginas individuales o los grupos arbitrarios de páginas se pueden asignar a las reservas apropiadas creadas con MEM_64K_PAGES. También es posible asignarlas a reservas de 2 MB proporcionando grupos de 32 páginas consecutivas alineadas a 2 MB. Las páginas se pueden asignar varias veces con distintas protecciones de página. Por ejemplo, una asignación puede ser PAGE_READWRITE mientras otra es PAGE_READONLY. Sin embargo, no se puede asignar una página varias veces con atributos de caché diferentes (WRITEBACK, WRITECOMBINE o UNCACHED). Si se intenta hacerlo, se devuelve un error. Esto tampoco era posible en la era XBOX One, aunque cualquier intento de hacerlo fallaba silenciosamente, dando la apariencia de que funcionaba.
La memoria virtual del sistema operativo de juego del Microsoft GDK funciona como el sistema de memoria de Windows. Si asigna dos direcciones mediante XMemVirtualAlloc que son adyacentes en el espacio de direcciones virtuales y, a continuación, intenta asignar esas páginas con una sola llamada a XMemMapPhysicalPages, el comportamiento es indefinido y no se espera que funcione. Aunque resulten ser adyacentes entre sí en el espacio de direcciones virtuales, son asignaciones diferentes en lo que respecta al sistema de memoria. Lo mismo se aplica al anular el mapeo de las páginas.

XMemVirtualQuery/XMemGetWorkingSetStatistics

XMemVirtualQuery y XMemGetWorkingSetStatistics son API de diagnóstico adicionales disponibles para investigar los detalles del uso de memoria específicos de XBOX. XMemVirtualQuery es muy similar a VirtualQuery. XMemVirtualQuery devuelve información adicional que no está disponible en VirtualQuery, incluidos el tamaño de página y la propiedad (sistema o juego) de la memoria. XMemGetWorkingSetStatistics devuelve información acerca de la superficie de memoria actualmente en uso.
Última modificación el 28 de agosto de 2026