XMemVirtualAlloc
Reserva, confirma ou altera o estado de uma região de páginas no espaço de endereço virtual do processo de chamada.Ao contrário do VirtualAlloc padrão do Win32, não há garantia de que a memória alocada por essa função seja inicializada automaticamente com zero.
Sintaxe
Parâmetros
BaseAddress _In_opt_Tipo: PVOID O endereço inicial da região a ser alocada. Se a memória estiver sendo reservada, o endereço especificado será arredondado para baixo até o múltiplo mais próximo da granularidade de alocação (4K, 64K ou 2MB no XBOX). Se a memória já estiver reservada e estiver sendo confirmada, o endereço será arredondado para baixo até o próximo limite de página. Se esse parâmetro for NULL, o sistema determinará onde alocar a região.
Size _In_
Tipo: SIZE_T O tamanho da região, em bytes. Se o parâmetro BaseAddress for NULL, esse valor será arredondado para cima até o próximo limite de página. Caso contrário, as páginas alocadas incluirão todas as páginas que contêm um ou mais bytes no intervalo de BaseAddress até BaseAddress+Size. Isso significa que um intervalo de 2 bytes que ultrapassa um limite de página faz com que ambas as páginas sejam incluídas na região alocada.
AllocationType _In_
Tipo: DWORD O tipo de alocação de memória. Esse parâmetro deve conter um dos valores a seguir.
Esse parâmetro também pode especificar os valores a seguir, conforme indicado.
Para títulos ERA, MEM_LARGE_PAGES representava páginas de 64K e, no Windows desktop, representa páginas de 2MB. Devido à ambiguidade, ele foi removido do Microsoft Game Development Kit (GDK).
XMemFlags _In_
Tipo: ULONGLONG Usado no XBOX para obter determinados tipos de memória especializados. Esse parâmetro deve conter um dos valores a seguir.
No XBOX, é possível alocar memória com um endereço de memória virtual restrito que garante que os bits superiores não sejam usados. Usar qualquer um dos valores a seguir restringirá o endereço ao uso do número de bits indicado. XMEM_40BIT_ADDRESS (0x00007000ULL), XMEM_41BIT_ADDRESS (0x00006000ULL), XMEM_42BIT_ADDRESS (0x00005000ULL), XMEM_43BIT_ADDRESS (0x00004000ULL), XMEM_44BIT_ADDRESS (0x00003000ULL), XMEM_45BIT_ADDRESS (0x00002000ULL), XMEM_46BIT_ADDRESS (0x00001000ULL).
A memória gráfica não pode ser alocada antes que o D3D12Device tenha sido criado ou que D3DConfigureVirtualMemory tenha sido chamado. Se for solicitada memória que será visível para a GPU, os títulos são obrigados a especificar também sinalizadores explícitos de proteção de página gráfica; não há mais um padrão baseado nas configurações de proteção de página da CPU. Essa é uma mudança em relação às versões anteriores do sistema operacional do XBOX.
Em dispositivos Anaconda e dispositivos Dante emulando Anaconda, ao usar o modo de memória de título Avançado, os parâmetros a seguir também podem ser aplicados. Esses parâmetros são ignorados em todos os outros casos.
Esses sinalizadores são opcionais. Se não forem especificados, todas as alocações gráficas usarão por padrão XMEM_GPU_OPTIMAL_BANDWIDTH_PREFERRED e todas as outras alocações usarão por padrão XMEM_STANDARD_BANDWIDTH_PREFERRED.
O parâmetro XMemFlags inclui uma marca opcional de código de quatro caracteres. Os caracteres podem ser qualquer um de a-z, A-Z, 0-9 e $. A função XMemMakeTag pode ser usada para construir a codificação correta do valor da marca na posição de bit correta. A marca só pode ser associada a regiões de memória confirmadas, não a reservas. Essa marca de código de quatro caracteres será representada pelos 24 bits superiores do parâmetro. A marca pode ser recuperada por meio de XMemVirtualQuery e também será mostrada na análise de memória do PIX.
Exemplo:
PageProtection _In_
Tipo: DWORD A proteção de memória para a região de páginas a ser alocada. Se as páginas estiverem sendo confirmadas, você poderá especificar qualquer uma das Constantes de Proteção de Memória. Os seguintes valores específicos do XBOX são permitidos para o parâmetro PageProtection, e um deles é obrigatório quando XMEM_GRAPHICS ou XMEM_GRAPHICS_32BIT_ADDRESS é especificado. Esse requisito é uma mudança em relação à versão anterior do sistema operacional do XBOX. Esses valores também podem ser especificados para outras funções de gerenciamento de memória (por exemplo, VirtualProtect) para endereços de memória em intervalos que foram alocados com XMEM_GRAPHICS.
Esse parâmetro também pode especificar o valor a seguir, conforme indicado.
Valor retornado
Tipo: PVOID Se a função for bem-sucedida, o valor retornado será o endereço base da região de páginas alocada. Se a função falhar, o valor retornado será NULL. Para obter informações de erro estendidas, chame GetLastError.Comentários
Cada página tem um Estado de Página associado. A função XMemVirtualAlloc pode executar as seguintes operações:- Confirmar uma região de páginas reservadas
- Reservar uma região de páginas livres
- Reservar e confirmar simultaneamente uma região de páginas livres
Requisitos
Cabeçalho: xmem.h Biblioteca: xmem.lib Plataformas compatíveis: consoles da família XBOX One e consoles XBOX SeriesConfira também
Referência de XMemXMemMapPhysicalPages
VirtualFree
