Heap de baixa fragmentação

[As informações neste tópico se aplicam 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 seus heaps.]

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

O LFH não é um heap separado. Em vez disso, é uma política que os aplicativos podem habilitar para seus heaps. Quando o LFH está habilitado, o sistema aloca memória em determinados tamanhos predeterminados. Quando um aplicativo solicita uma alocação de memória de um heap 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 um heap, use a função GetProcessHeap para obter um identificador para o heap padrão do processo de chamada ou use o identificador para um heap privado criado pela função HeapCreate . Em seguida, chame a função HeapSetInformation com o identificador .

O LFH não pode ser habilitado para heaps criados com HEAP_NO_SERIALIZE ou para heaps criados com um tamanho fixo. O LFH também não poderá ser habilitado se você estiver usando as ferramentas de depuração de heap em Ferramentas de Depuração para Windows ou Verificador de Aplicativos.

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

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 todos os aplicativos se beneficiam do LFH. Para avaliar os efeitos da habilitação do LFH em seu aplicativo, use dados de criação de perfil de desempenho.