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 queVirtualAlloc, 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 aVirtualAlloc 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 conMEM_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 aVirtualQuery. 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.