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 (Low-Fragmentation Heap, LFH) nach Bedarf, um Speicherbelegungsanforderungen zu bedienen. Anwendungen müssen LFH nicht für ihre Heaps aktivieren.]
Die Heapfragmentierung ist ein Zustand, in dem der verfügbare Arbeitsspeicher in kleine, nicht zusammenhängende Blöcke aufgeteilt wird. Wenn ein Heap fragmentiert ist, kann die Speicherbelegung auch dann fehlschlagen, wenn der insgesamt verfügbare Arbeitsspeicher im Heap ausreicht, um eine Anforderung zu erfüllen, da kein einzelner Speicherblock groß genug ist. Der Heap mit niedriger Fragmentierung (Low-Fragmentation Heap, LFH) trägt zur Reduzierung der Heapfragmentierung bei.
Die LFH ist kein separater Heap. Stattdessen handelt es sich um eine Richtlinie, die Anwendungen für ihre Heaps aktivieren können. Wenn LFH aktiviert ist, belegt das System Arbeitsspeicher in bestimmten vordefinierten Größen. Wenn eine Anwendung eine Speicherbelegung von einem Heap anfordert, für den LFH aktiviert ist, ordnet das System den kleinsten Speicherblock zu, der groß genug ist, um die angeforderte Größe zu enthalten. Das System verwendet die LFH nicht für Zuordnungen, die größer als 16 KB sind, unabhängig davon, ob die LFH aktiviert ist oder nicht.
Eine Anwendung sollte LFH nur für den Standardheap des aufrufenden Prozesses oder für private Heaps aktivieren, die von der Anwendung erstellt wurden. 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 Heapdebuggingtools in Debugtools für Windows oder Microsoft Application Verifierverwenden.
Nachdem die LFH für einen Heap aktiviert wurde, kann sie nicht mehr deaktiviert werden.
Anwendungen, die am meisten von LFH profitieren, sind Multithreadanwendungen, die häufig Arbeitsspeicher belegen und eine Vielzahl von Zuordnungsgrößen unter 16 KB verwenden. Allerdings profitieren nicht alle Anwendungen von der LFH. Verwenden Sie Leistungsprofilerstellungsdaten, um die Auswirkungen der Aktivierung von LFH in Ihrer Anwendung zu bewerten.