Heap mit geringer Fragmentierung
[Die Informationen in diesem Thema gelten für Windows Server 2003 und Windows XP. Ab Windows Vista verwendet das System den Heap mit geringer Fragmentierung (LFH) nach Bedarf, um Speicherzuweisungsanforderungen zu verarbeiten. Anwendungen müssen das LFH nicht für ihre Heaps aktivieren.]
Heap-Fragmentierung ist ein Zustand, in dem der verfügbare Speicher in kleine, nicht zusammenhängende Blöcke unterteilt wird. Wenn ein Heap fragmentiert ist, kann die Speicherzuweisung fehlschlagen, auch wenn der gesamte verfügbare Speicher im Heap ausreicht, um eine Anforderung zu erfüllen, da kein einzelner Speicherblock groß genug ist. Der Heap mit geringer Fragmentierung (LFH) trägt dazu bei, die Heapfragmentierung zu reduzieren.
Der LFH ist kein separater Heap. Stattdessen handelt es sich um eine Richtlinie, die Anwendungen für ihre Heaps aktivieren können. Wenn die LFH aktiviert ist, weist das System Speicher in bestimmten vordefinierten Größen zu. Wenn eine Anwendung eine Speicherzuweisung von einem Heap anfordert, der die LFH aktiviert hat, weist das System den kleinsten Speicherblock zu, der groß genug ist, um die angeforderte Größe zu enthalten. In der aktuellen Implementierung verwendet das System die LFH nicht für Zuordnungen, die größer als ca. 16 KB sind, unabhängig davon, ob die LFH aktiviert ist.
Eine Anwendung sollte die LFH nur für den Standardhap des Aufrufvorgangs oder für privaten Heaps aktivieren, die die Anwendung erstellt hat. Um das LFH für einen Heap zu aktivieren, verwenden Sie die GetProcessHeap--Funktion, um einen Handle für den Standardmäßigen Heap des aufrufenden Prozesses abzurufen, oder verwenden Sie das Handle für einen privaten Heap, der von der HeapCreate-Funktion erstellt wurde. Rufen Sie dann die HeapSetInformation--Funktion mit dem Handle auf.
Die LFH kann nicht für Heaps aktiviert werden, die mit HEAP_NO_SERIALIZE oder für Heaps erstellt wurden, die mit einer festen Größe erstellt wurden. Die LFH kann auch nicht aktiviert werden, wenn Sie die Heap-Debuggingtools in Debugtools für Windows oder Application Verifierverwenden.
Nachdem der LFH für einen Heap aktiviert wurde, kann er nicht deaktiviert werden.
Anwendungen, die vom LFH am meisten profitieren, sind Multithread-Anwendungen, die häufig Arbeitsspeicher zuweisen und eine Vielzahl von Zuordnungsgrößen bequem unter 16 KB verwenden. Allerdings profitieren nicht alle Anwendungen von der LFH. Verwenden Sie Leistungsprofildaten, um die Auswirkungen der Aktivierung des LFH in Ihrer Anwendung zu bewerten.