Udostępnij za pośrednictwem


Sterta o niskiej fragmentacji

[Informacje w tym temacie dotyczą systemów Windows Server 2003 i Windows XP. Począwszy od systemu Windows Vista, system używa sterty o niskiej fragmentacji (LFH) zgodnie z potrzebami do obsługi żądań alokacji pamięci. Aplikacje nie muszą włączać LFH dla ich stert.]

Fragmentacja sterty to stan, w którym dostępna pamięć jest podzielona na małe, nietygodne bloki. W przypadku fragmentowania sterty alokacja pamięci może zakończyć się niepowodzeniem nawet wtedy, gdy łączna ilość dostępnej pamięci w stercie wystarczy, aby spełnić żądanie, ponieważ żaden pojedynczy blok pamięci nie jest wystarczająco duży. Sterta o niskiej fragmentacji (LFH) pomaga zmniejszyć fragmentację stert.

LFH nie jest oddzielnym stertą. Zamiast tego jest to zasada, którą aplikacje mogą włączyć dla ich stert. Po włączeniu funkcji LFH system przydziela pamięć w określonych wstępnie określonych rozmiarach. Gdy aplikacja żąda alokacji pamięci z sterty z włączoną LFH, system przydziela najmniejszy blok pamięci, który jest wystarczająco duży, aby zawierać żądany rozmiar. W bieżącej implementacji system nie używa LFH do alokacji większych niż około 16 KB, bez względu na to, czy włączono funkcję LFH.

Aplikacja powinna włączyć funkcję LFH tylko dla domyślnego sterta procesu wywołującego lub dla prywatnych stert utworzonych przez aplikację. Aby włączyć funkcję LFH dla sterta, użyj funkcji GetProcessHeap, aby uzyskać dojście do domyślnego sterta procesu wywoływania lub użyj uchwytu do prywatnej sterty utworzonej przez funkcję HeapCreate. Następnie wywołaj funkcję HeapSetInformation z uchwytem.

Nie można włączyć LFH dla sterty utworzonych za pomocą HEAP_NO_SERIALIZE lub dla sterty utworzonych o stałym rozmiarze. Nie można również włączyć funkcji LFH, jeśli używasz narzędzi debugowania stert w narzędziach debugowania dla systemu Windows lub weryfikatora aplikacji.

Po włączeniu sterta LFH nie można go wyłączyć.

Aplikacje, które korzystają najbardziej z LFH, to aplikacje wielowątkowy, które często przydzielają pamięć i korzystają z różnych rozmiarów alokacji wygodnie poniżej 16 KB. Jednak nie wszystkie aplikacje korzystają z LFH. Aby ocenić skutki włączenia funkcji LFH w aplikacji, użyj danych profilowania wydajności.