Freigeben über


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 Speicherzuordnungsanforderungen zu verwalten. Anwendungen müssen die LFH nicht für ihre Heaps aktivieren.]

Heapfragmentierung ist ein Zustand, in dem der verfügbare Arbeitsspeicher in kleine, nicht zusammenhängende Blöcke unterteilt wird. Wenn ein Heap fragmentiert ist, kann die Speicherzuordnung auch dann fehlschlagen, wenn der gesamte verfügbare Arbeitsspeicher 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 Arbeitsspeicher in bestimmten vordefinierten Größen zu. Wenn eine Anwendung eine Speicherzuordnung von einem Heap anfordert, bei dem LFH aktiviert ist, 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 den LFH nicht für Zuordnungen, die größer als ca. 16 KB sind, unabhängig davon, ob die LFH aktiviert ist oder nicht.

Eine Anwendung sollte die LFH nur für den Standardheap des aufrufenden Prozesses oder für private Heaps aktivieren, die die Anwendung erstellt hat. Um die LFH für einen Heap zu aktivieren, verwenden Sie die GetProcessHeap-Funktion , um ein Handle für den Standardheap 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 erstellt wurden, oder für Heaps, die mit einer festen Größe erstellt wurden. Die LFH kann auch nicht aktiviert werden, wenn Sie die Heap-Debugtools in Debugtools für Windows oder Application Verifier verwenden.

Nachdem die LFH für einen Heap aktiviert wurde, kann sie nicht deaktiviert werden.

Anwendungen, die am meisten von der LFH profitieren, sind Multithreadanwendungen, 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 Leistungsprofilerstellungsdaten, um die Auswirkungen der Aktivierung der LFH in Ihrer Anwendung zu bewerten.