Partilhar via


Pilha de baixa fragmentação

[As informações neste tópico aplicam-se ao Windows Server 2003 e ao Windows XP. A partir do Windows Vista, o sistema usa o heap de baixa fragmentação (LFH) conforme necessário para atender às solicitações de alocação de memória. Os aplicativos não precisam habilitar o LFH para suas pilhas.]

A fragmentação de pilha é um estado no qual a memória disponível é dividida em pequenos blocos não contíguos. Quando uma pilha é fragmentada, a alocação de memória pode falhar mesmo quando a memória total disponível na pilha é suficiente para satisfazer uma solicitação, porque nenhum bloco único de memória é grande o suficiente. A pilha de baixa fragmentação (LFH) ajuda a reduzir a fragmentação da pilha.

O LFH não é uma pilha separada. Em vez disso, é uma política que os aplicativos podem habilitar para seus heaps. Quando o LFH está ativado, o sistema aloca memória em determinados tamanhos predeterminados. Quando um aplicativo solicita uma alocação de memória de uma pilha que tem o LFH habilitado, o sistema aloca o menor bloco de memória que é grande o suficiente para conter o tamanho solicitado. Na implementação atual, o sistema não usa o LFH para alocações maiores que aproximadamente 16 KB, independentemente de o LFH estar habilitado ou não.

Um aplicativo deve habilitar o LFH somente para o heap padrão do processo de chamada ou para heaps privados que o aplicativo criou. Para habilitar o LFH para uma pilha, use a função GetProcessHeap para obter um identificador para a pilha padrão do processo de chamada ou use o identificador para uma pilha privada criada pela funçãoHeapCreate. Em seguida, chame o função HeapSetInformation com o identificador.

O LFH não pode ser habilitado para pilhas criadas com HEAP_NO_SERIALIZE ou para pilhas criadas com um tamanho fixo. O LFH também não pode ser habilitado se você estiver usando as ferramentas de depuração de heap no Debugging Tools for Windows ou Application Verifier.

Depois que o LFH tiver sido habilitado para um heap, ele não poderá ser desativado.

Os aplicativos que mais se beneficiam do LFH são aplicativos multithreaded que alocam memória com frequência e usam uma variedade de tamanhos de alocação confortavelmente abaixo de 16 KB. No entanto, nem todas as aplicações beneficiam do LFH. Para avaliar os efeitos da habilitação do LFH em seu aplicativo, use dados de perfil de desempenho.