Skip to main content

XMemAllocDefault

A rotina padrão de alocação de memória.

Sintaxe

Parâmetros

Size Tipo: SIZE_T [in] Tamanho do bloco de memória que está sendo solicitado. Attributes
Tipo: ULONGLONG
[in] Atributos da alocação. Consulte XALLOC_ATTRIBUTES Valor retornado Tipo: PVOID Retorna um ponteiro para o bloco de memória alocado. Comentários Duas funções padrão são exportadas pelo sistema: XMemAllocDefault e XMemFreeDefault. Elas representam os valores iniciais dos ganchos de alocação. Se os títulos optarem por não fornecer seus próprios ganchos de alocação, esses alocadores padrão do sistema serão usados. Se os títulos quiserem fornecer ganchos de alocação para fins de rastreamento, mas não quiserem implementar seu próprio alocador, eles poderão chamar o alocador padrão diretamente. XMemAllocDefault usa os mesmos parâmetros que XMemAlloc. Ela fornece a implementação do sistema operacional de XMemAlloc para títulos que não desejam interceptar o comportamento ou que desejam recorrer ao comportamento padrão nos casos que não tratam. A plataforma XBOX canaliza todas as alocações que faz da memória do título por meio de XMemAlloc, o que oferece aos desenvolvedores a oportunidade de monitorar ou tratar os requisitos de memória da plataforma. Os títulos podem fornecer seus próprios gerenciadores de memória para algumas ou todas as solicitações que passam por XMemAlloc. Para o restante, a API XMemAllocDefault é usada. XMemAllocDefault atende às solicitações de alocação por meio de um destes três mecanismos: HeapAlloc, VirtualAlloc ou uma série de heaps gerenciados internamente. A decisão sobre qual desses três mecanismos usar depende do tipo e dos requisitos de alinhamento da alocação. Diagrama mostrando que XMemAllocDefault atua como a interface para HeapAlloc, VirtualAlloc e heaps Xmem Toda alocação do tipo XALLOC_MEMTYPE_HEAP_CACHEABLE irá para HeapAlloc, desde que especifique um alinhamento <= 16 bytes e um tamanho de página de 4 KB. Alocações do tipo XALLOC_MEMTYPE_PHYSICAL_*, ou que exigem um endereço de 32 bits, ou que são > 128 KB, ou que exigem um alinhamento >= 64 KB irão para XMemVirtualAlloc. Alocações que especificam XALLOC_PAGESIZE_2MB_* irão para XMemVirtualAlloc. Alocações do tipo XALLOC_MEMTYPE_GRAPHICS_* serão promovidas para um tamanho mínimo de página de 64 KB. Caso contrário, a alocação será tratada pelo heap interno de XMemAllocDefault. Há dois heaps para cada um dos 15 tipos de alocação documentados; um trata alocações < 4 KB com alinhamento <= 4 KB (o heap de “blocos pequenos”) e o outro trata todas as demais alocações (o heap de “blocos grandes”). Isso soma 30 heaps no total. Detalhes do heap de XMemAllocDefault
  • Um heap é criado sob demanda; portanto, se não houver alocações de um tipo específico para um determinado tamanho grande/pequeno, o heap nunca será criado.
  • Cada heap reservará 2 GB de espaço de endereço virtual. Portanto, não pode haver mais de 2 GB de alocações para um determinado heap.
  • Se um heap estiver configurado para usar páginas de 2 MB, cada heap confirmará páginas de 2 MB conforme necessário; assim, toda alocação será atendida a partir de uma página de 2 MB, mesmo que páginas de 64 KB sejam solicitadas. Por padrão, heaps que usam páginas de 2 MB podem ser rebaixados para páginas de 64 KB se o sistema esgotar as páginas de 2 MB. Esse comportamento de rebaixamento pode ser desabilitado usando eXMEMOPT_XMEMALLOCDEFAULT_DISABLEPAGESIZEDEMOTION com XMemSetOption.
  • Se um heap estiver configurado para usar páginas de 64 KB, cada heap confirmará 512 KB de páginas conforme necessário.
  • Cada heap é de thread único; portanto, solicitações simultâneas de alocação e/ou liberação de vários threads serão serializadas. A serialização só é necessária dentro de cada heap individual; portanto, solicitações simultâneas de heaps diferentes podem ser tratadas simultaneamente.
  • Cada heap tentará compactar as alocações da forma mais densa possível (ainda atendendo às restrições de alinhamento) para minimizar a quantidade de memória necessária para dar suporte ao heap.
  • Cada heap pode especificar sua própria histerese de alocação, que determina com que agressividade a memória será devolvida ao sistema operacional quando for liberada. Por padrão, cada heap de gráficos especifica uma histerese de 64 MB, e os heaps XALLOC_MEMTYPE_HEAP_CACHEABLE especificam 8 MB (é improvável que eles sejam usados, já que alocações de heap armazenáveis em cache normalmente não especificam um requisito de alinhamento > 16 bytes). Se a histerese for definida como 64 MB, isso significa que o heap precisará acumular 64 MB de páginas livres antes que qualquer página livre seja devolvida ao sistema operacional. Isso garante que o código do heap nunca precise recorrer ao sistema operacional enquanto a quantidade de memória necessária variar dentro do valor da histerese.
  • Os heaps começam sem memória confirmada e solicitam memória ao sistema operacional sob demanda. No entanto, um heap pode pré-alocar memória do sistema operacional, se desejado, chamando XMemPreallocateFreeSpace para esse heap. Isso efetivamente eleva a reserva de páginas livres até o limite de histerese desse heap.
Confira também xmem_set_allocation_hooks xmem_allocation_hooks
Last modified on October 6, 2026