Família de APIs de alocação de memória
VirtualAlloc/VirtualFree
VirtualAlloc e VirtualFree agora são idênticas às implementações padrão dessas APIs em ambientes de PC com Windows. Isso oferece um alto grau de compatibilidade com qualquer código existente que use essas APIs para obter memória. No sistema operacional ERA do XBOX One, VirtualAlloc foi modificada para alocar tipos de memória específicos do XBOX por meio dos sinalizadores MEM_TITLE, MEM_GRAPHICS e MEM_TOOL. Esses sinalizadores não são mais compatíveis. Em vez disso, use XMemVirtualAlloc.
HeapAlloc/HeapFree (e semelhantes)
As APIs relacionadas ao heap Win32 também são idênticas à implementação padrão dessas APIs em ambientes de PC com Windows. Assim comoVirtualAlloc, isso oferece um alto grau de compatibilidade com o código existente. É importante ressaltar que HeapAlloc e HeapFree são as APIs usadas pelas bibliotecas C runtime/VCRuntime para implementar malloc/new/free/delete e APIs de memória relacionadas do padrão C.
Todos os heaps Win32 padrão usam páginas grandes (2 MB) para o armazenamento de back-end, a fim de oferecer o desempenho ideal. O heap subdivide com eficiência cada página de 2 MB para atender às alocações recebidas, o que resulta em quase nenhum aumento no volume de memória em comparação com um heap Win32 sobre páginas de 4 KB. Isso também reduz a frequência com que o heap Win32 precisa fazer chamadas de API caras a VirtualAlloc à medida que se expande.
No sistema operacional ERA do XBOX One,
HeapAlloc foi modificada para aceitar o sinalizador HEAP_TOOL para obter memória de depuração/estendida por meio de um heap Win32. Esse sinalizador foi preterido e, em uma atualização futura do Microsoft Game Development Kit (GDK), uma nova API estará disponível para substituir essa funcionalidade.XMemVirtualAlloc
XMemVirtualAlloc é uma nova API criada para o Microsoft Game Development Kit (GDK). Essa API substitui o uso de chamadas aVirtualAlloc feitas com os sinalizadores MEM_TITLE, MEM_GRAPHICS e MEM_TOOL do ambiente ERA do XBOX One. Os parâmetros e a convenção de chamada correspondem de perto a VirtualAlloc, com a adição de um novo campo XMemFlags que permite ao chamador adicionar mais detalhes (específicos do XBOX) sobre o tipo de memória necessário.
XMemAllocatePhysicalPages/XMemMapPhysicalPages/XMemFreePhysicalPages
Você pode usar as APIs de mapeamento de páginas físicas para obter índices de páginas físicas na memória. Alocar páginas dessa forma dá ao jogo controle total sobre a propriedade da RAM. Os números de página retornados podem ser combinados e mapeados no espaço de endereço virtual do jogo conforme necessário. Assim como no sistema operacional ERA do XBOX One, cada número de página física retornado representa 64 KB de RAM. Páginas individuais ou grupos arbitrários de páginas podem ser mapeados em reservas apropriadas criadas comMEM_64K_PAGES. O mapeamento em reservas de 2 MB também é possível fornecendo grupos de 32 páginas consecutivas alinhados a 2 MB.
As páginas podem ser mapeadas várias vezes com proteções de página diferentes. Por exemplo, um mapeamento pode ser PAGE_READWRITE enquanto outro é PAGE_READONLY. No entanto, não é possível mapear uma página várias vezes com atributos de cache diferentes (WRITEBACK, WRITECOMBINE ou UNCACHED). Tentar fazer isso retorna um erro. Isso também não era possível no ERA do XBOX One, embora qualquer tentativa de fazê-lo falhasse silenciosamente, dando a impressão de que havia funcionado.
A memória virtual do Microsoft GDK Game OS funciona como o sistema de memória do Windows. Se você alocar dois endereços usando XMemVirtualAlloc que sejam adjacentes no espaço de endereço virtual e depois tentar mapear essas páginas com uma única chamada a XMemMapPhysicalPages, o comportamento será indefinido e não se espera que funcione. Mesmo que estejam adjacentes no espaço de endereço virtual, elas são alocações diferentes do ponto de vista do sistema de memória. O mesmo se aplica quando você desfaz o mapeamento das páginas.
XMemVirtualQuery/XMemGetWorkingSetStatistics
XMemVirtualQuery e XMemGetWorkingSetStatistics são APIs de diagnóstico adicionais disponíveis para investigar detalhes de uso de memória específicos do XBOX. XMemVirtualQuery é muito semelhante aVirtualQuery. XMemVirtualQuery retorna informações adicionais que não estão disponíveis em VirtualQuery, incluindo o tamanho da página e a propriedade (sistema ou jogo) da memória. XMemGetWorkingSetStatistics retorna informações sobre o volume de memória atualmente em uso.