Funkcje stert
Każdy proces ma domyślną stertę dostarczaną przez system. Aplikacje, które często przydzielają sterty, mogą zwiększyć wydajność przy użyciu prywatnych stertów.
Sterta prywatna to blok co najmniej jednej strony w przestrzeni adresowej procesu wywołującego. Po utworzeniu prywatnej sterty proces używa funkcji, takich jak HeapAlloc i HeapFree do zarządzania pamięcią w tej stercie.
Funkcje stert mogą również służyć do zarządzania pamięcią w domyślnym stercie procesu przy użyciu uchwytu zwróconego przez funkcję GetProcessHeap. Nowe aplikacje powinny używać funkcji stertowania zamiast funkcji globalnych i lokalnych w tym celu.
Nie ma różnicy między pamięcią przydzieloną z prywatnej sterty i przydzieloną przy użyciu innych funkcji alokacji pamięci. Aby uzyskać pełną listę funkcji, zobacz tabelę w funkcje zarządzania pamięcią.
Nuta
Wątek powinien wywoływać funkcje stert tylko dla domyślnego sterta procesu i prywatnych stertów tworzonych i zarządzanych przez wątek przy użyciu dojść zwracanych przez GetProcessHeap lub HeapCreate funkcji.
Funkcja HeapCreate tworzy prywatny obiekt sterty, z którego proces wywołujący może przydzielić bloki pamięci przy użyciu funkcjiHeapAlloc. HeapCreate określa zarówno rozmiar początkowy, jak i maksymalny rozmiar sterty. Początkowy rozmiar określa liczbę zatwierdzonych, początkowo przydzielonych stron odczytu/zapisu dla sterty. Maksymalny rozmiar określa łączną liczbę stron zarezerwowanych. Te strony tworzą ciągły blok w wirtualnej przestrzeni adresowej procesu, w którym sterta może rosnąć. Dodatkowe strony są automatycznie zatwierdzane z tego zarezerwowanego miejsca, jeśli żądania przez HeapAlloc przekraczają bieżący rozmiar zatwierdzonych stron, przy założeniu, że magazyn fizyczny dla niego jest dostępny. Po zatwierdzeniu stron nie zostaną one anulowane, dopóki proces nie zostanie zakończony lub dopóki sterta nie zostanie zniszczona przez wywołanie funkcji HeapDestroy.
Pamięć prywatnego obiektu sterta jest dostępna tylko dla procesu, który go utworzył. Jeśli biblioteka dll (dynamic-link library) tworzy stertę prywatną, robi to w przestrzeni adresowej procesu, który nazwał bibliotekę DLL. Jest dostępny tylko dla tego procesu.
Funkcja HeapAlloc przydziela określoną liczbę bajtów z prywatnej sterty i zwraca wskaźnik do przydzielonego bloku. Ten wskaźnik może być używany w HeapFree, HeapReAlloc, HeapSizei funkcji HeapValidate.
Pamięć przydzielona przez HeapAlloc nie jest wymienna. Adres zwrócony przez heapAlloc jest prawidłowy do momentu zwolnienia lub przydziału bloku pamięci; blok pamięci nie musi być zablokowany.
Ponieważ system nie może skompaktować prywatnej sterty, może zostać rozdrobniony. Aplikacje, które przydzielają duże ilości pamięci w różnych rozmiarach alokacji, mogą używać sterty o niskiej fragmentacji w celu zmniejszenia fragmentacji sterty.
Możliwe użycie funkcji sterty polega na utworzeniu prywatnej sterty podczas uruchamiania procesu, określając początkowy rozmiar wystarczający do spełnienia wymagań dotyczących pamięci procesu. Jeśli wywołanie funkcji HeapCreate zakończy się niepowodzeniem, proces może zakończyć lub powiadomić użytkownika o niedoborze pamięci; jeśli jednak zakończy się powodzeniem, proces jest pewny posiadania pamięci, której potrzebuje.
Pamięć żądana przez stosUtwórz może lub nie jest ciągła. Pamięć przydzielona w stercie przez HeapAlloc jest ciągła. Nie należy zapisywać ani odczytywać z pamięci w stercie z tą różnicą, że przydzielone przez heapAlloc, ani nie należy zakładać żadnej relacji między dwoma obszarami pamięci przydzielonych przez HeapAlloc.
Nie należy odwoływać się w żaden sposób do pamięci, która została zwolniona przez HeapFree. Po uwolnieniu pamięci wszelkie informacje, które mogły być w nim, znikną na zawsze. Jeśli potrzebujesz informacji, nie należy zwalniać pamięci zawierającej informacje. Wywołania funkcji zwracające informacje o pamięci (na przykład HeapSize) mogą nie być używane z zwolniną pamięcią, ponieważ mogą zwracać fałszywe dane.
Funkcja HeapDestroy niszczy prywatny obiekt sterta. Decommits i zwalnia wszystkie strony obiektu sterta i unieważnia uchwyt do sterta.
Tematy pokrewne