Heap a bassa frammentazione

[Le informazioni contenute in questo argomento si applicano a Windows Server 2003 e Windows XP. A partire da Windows Vista, il sistema usa l'heap a bassa frammentazione (LFH) in base alle esigenze per gestire le richieste di allocazione della memoria. Le applicazioni non devono abilitare LFH per gli heap.

La frammentazione dell'heap è uno stato in cui la memoria disponibile è suddivisa in blocchi piccoli e non contigui. Quando un heap è frammentato, l'allocazione della memoria può avere esito negativo anche quando la memoria totale disponibile nell'heap è sufficiente per soddisfare una richiesta, perché nessun singolo blocco di memoria è sufficientemente grande. L'heap a bassa frammentazione (LFH) consente di ridurre la frammentazione dell'heap.

LFH non è un heap separato. È invece un criterio che le applicazioni possono abilitare per gli heap. Quando l'LFH è abilitato, il sistema alloca memoria in determinate dimensioni predeterminate. Quando un'applicazione richiede un'allocazione di memoria da un heap con LFH abilitato, il sistema alloca il blocco di memoria più piccolo sufficientemente grande da contenere le dimensioni richieste. Nell'implementazione corrente, il sistema non usa LFH per le allocazioni superiori a circa 16 KB, indipendentemente dal fatto che l'LFH sia abilitato o meno.

Un'applicazione deve abilitare LFH solo per l'heap predefinito del processo chiamante o per gli heap privati creati dall'applicazione. Per abilitare LFH per un heap, usare la funzione GetProcessHeap per ottenere un handle per l'heap predefinito del processo chiamante oppure usare l'handle per un heap privato creato dalla funzione HeapCreate . Chiamare quindi la funzione HeapSetInformation con l'handle.

LFH non può essere abilitato per gli heap creati con HEAP_NO_SERIALIZE o per heap creati con una dimensione fissa. LFH non può essere abilitato anche se si usano gli strumenti di debug dell'heap in Strumenti di debug per Windows o Verifica applicazione.

Dopo che l'LFH è stato abilitato per un heap, non può essere disabilitato.

Le applicazioni che traggono maggior vantaggio dall'LFH sono applicazioni multithreading che allocano spesso la memoria e usano un'ampia gamma di dimensioni di allocazione comodamente inferiori a 16 KB. Tuttavia, non tutte le applicazioni traggono vantaggio dall'LFH. Per valutare gli effetti dell'abilitazione dell'LFH nell'applicazione, usare i dati di profilatura delle prestazioni.