Heap med låg fragmentering
[Informationen i det här avsnittet gäller för Windows Server 2003 och Windows XP. Från och med Windows Vista använder systemet LFH (low-fragmentation heap) efter behov för att hantera minnesallokeringsbegäranden. Program behöver inte aktivera LFH för sina heaps.]
Heapfragmentering är ett tillstånd där tillgängligt minne är uppdelat i små, icke-sammanhängande block. När en heap är fragmenterad kan minnesallokeringen misslyckas även när det totala tillgängliga minnet i heapen räcker för att uppfylla en begäran, eftersom inget enskilt minnesblock är tillräckligt stort. Den låga fragmenteringshögen (LFH) hjälper till att minska heapfragmentering.
LFH är inte en separat heap. I stället är det en princip som program kan aktivera för sina heaps. När LFH är aktiverat allokerar systemet minne i vissa förutbestämda storlekar. När ett program begär en minnesallokering från en heap som har LFH aktiverat allokerar systemet det minsta minnesblocket som är tillräckligt stort för att innehålla den begärda storleken. I den aktuella implementeringen använder systemet inte LFH för allokeringar som är större än cirka 16 KB, oavsett om LFH är aktiverat eller inte.
Ett program bör endast aktivera LFH för standardhögen för anropsprocessen eller för privata heaps som programmet har skapat. Om du vill aktivera LFH för en heap använder du funktionen GetProcessHeap för att hämta ett handtag till standardhögen för anropsprocessen eller använda handtaget till en privat heap som skapats av funktionen HeapCreate. Anropa sedan funktionen HeapSetInformation med handtaget.
LFH kan inte aktiveras för heaps som skapats med HEAP_NO_SERIALIZE eller för heaps som skapats med en fast storlek. LFH kan inte heller aktiveras om du använder heap-felsökningsverktygen i Felsökningsverktyg för Windows eller programverifierare.
När LFH har aktiverats för en heap kan den inte inaktiveras.
Program som drar mest nytta av LFH är flertrådade program som allokerar minne ofta och använder en mängd olika allokeringsstorlekar bekvämt under 16 KB. Alla program drar dock inte nytta av LFH. Om du vill utvärdera effekterna av att aktivera LFH i ditt program använder du prestandaprofileringsdata.