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. AttributesTipo: 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.

- 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_DISABLEPAGESIZEDEMOTIONcom 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.
