Sdílet prostřednictvím


Halda s nízkou fragmentací

[Informace v tomto tématu platí pro Systém Windows Server 2003 a Windows XP. Počínaje systémem Windows Vista systém používá haldu s nízkou fragmentací (LFH) podle potřeby k žádostem o přidělení paměti. Aplikace nepotřebují povolit LFH pro jejich haldy.]

Fragmentace haldy je stav, ve kterém je dostupná paměť rozdělená na malé, nesouvislé bloky. Když je halda fragmentovaná, přidělení paměti může selhat i v případě, že celková dostupná paměť v haldě stačí k uspokojení požadavku, protože není dostatečně velký žádný blok paměti. Halda s nízkou fragmentací (LFH) pomáhá snížit fragmentaci haldy.

LFH není samostatná halda. Místo toho se jedná o zásadu, kterou můžou aplikace povolit pro své haldy. Pokud je povolen protokol LFH, systém přidělí paměť v určitých předem určených velikostech. Když aplikace požádá o přidělení paměti z haldy s povolenou LFH, systém přidělí nejmenší blok paměti, který je dostatečně velký, aby obsahoval požadovanou velikost. V současné implementaci systém nepoužívá LFH pro přidělení větší než přibližně 16 kB, zda je povoleno nebo ne.

Aplikace by měla povolit LFH pouze pro výchozí haldu volajícího procesu nebo pro privátní haldy, kterou aplikace vytvořila. Pokud chcete povolit funkci LFH pro haldu, použijte funkci GetProcessHeap k získání popisovače výchozí haldy volajícího procesu, nebo použijte popisovač k privátní haldě vytvořené funkcí HeapCreate. Potom zavolejte funkci HeapSetInformation popisovačem.

LFH nelze povolit pro haldy vytvořené s HEAP_NO_SERIALIZE nebo pro haldy vytvořené s pevnou velikostí. LFH také nelze povolit, pokud používáte nástroje ladění haldy v nástrojích pro ladění pro Windows nebo Application Verifier.

Po povolení haldy LFH ji nelze zakázat.

Aplikace, které využívají většinu z LFH, jsou vícevláknové aplikace, které často přidělují paměť a používají různé velikosti přidělení pohodlně nižší než 16 kB. Ne všechny aplikace však využívají LFH. Pokud chcete posoudit účinky povolení LFH ve vaší aplikaci, použijte data profilace výkonu.