Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Elke nieuwe thread of glasvezel ontvangt een eigen stackruimte die bestaat uit gereserveerde en aanvankelijk vastgelegde geheugen. De gereserveerde geheugengrootte vertegenwoordigt de totale stacktoewijzing in virtueel geheugen. Als zodanig is de gereserveerde grootte beperkt tot het virtuele adresbereik. De in eerste instantie vastgelegde pagina's maken geen gebruik van fysiek geheugen totdat ernaar wordt verwezen; Ze verwijderen echter wel pagina's uit de limiet voor het totale doorvoeren van het systeem. Dit is de grootte van het paginabestand plus de grootte van het fysieke geheugen. Het systeem voert extra pagina's uit het gereserveerde stackgeheugen door wanneer ze nodig zijn, totdat de stack de gereserveerde grootte min één pagina bereikt (die wordt gebruikt als een beveiligingspagina om stack-overloop te voorkomen) of het systeem is zo weinig geheugen dat de bewerking mislukt.
U kunt het beste zo klein mogelijk een stackgrootte kiezen en de stapel doorvoeren die nodig is voor de thread of glasvezel om betrouwbaar te worden uitgevoerd. Elke pagina die is gereserveerd voor de stack, kan niet worden gebruikt voor andere doeleinden.
Een stack wordt vrijgemaakt wanneer de thread wordt afgesloten. Het wordt niet vrijgemaakt als de thread wordt beëindigd door een andere thread.
De standaardgrootte voor het gereserveerde en in eerste instantie vastgelegde stackgeheugen wordt opgegeven in de header van het uitvoerbare bestand. Het maken van threads of vezels mislukt als er onvoldoende geheugen is om het aantal aangevraagde bytes te reserveren of door te voeren. De standaardgrootte voor stackreservering die door de linker wordt gebruikt, is 1 MB. Als u een andere standaardgrootte voor stackreservering wilt opgeven voor alle threads en vezels, gebruikt u de STACKSIZE-instructie in het moduledefinitiebestand (.def). Het besturingssysteem rondt de opgegeven grootte af naar het dichtstbijzijnde veelvoud van de toewijzingsgranulariteit van het systeem (meestal 64 kB). Als u de toewijzingsgranulariteit van het huidige systeem wilt ophalen, gebruikt u de functie GetSystemInfo.
Als u de oorspronkelijk vastgelegde stackruimte wilt wijzigen, gebruikt u de dwStackSize-parameter van de CreateThread-, CreateRemoteThreadof functie CreateFiber. Deze waarde wordt naar boven afgerond op de dichtstbijzijnde pagina. Over het algemeen is de reservegrootte de standaardreservegrootte die is opgegeven in de uitvoerbare header. Als de oorspronkelijk vastgelegde grootte die is opgegeven door dwStackSize- echter groter is dan of gelijk is aan de standaardreservegrootte, is de reservegrootte deze nieuwe doorvoergrootte die naar boven is afgerond op het dichtstbijzijnde veelvoud van 1 MB.
Als u de grootte van de gereserveerde stack wilt wijzigen, stelt u de dwCreationFlags-parameter van CreateThread of CreateRemoteTh read in op STACK_SIZE_PARAM_IS_A_RESERVATION en gebruikt u de parameter dwStackSize. In dit geval is de oorspronkelijk vastgelegde grootte de standaardgrootte die is opgegeven in de uitvoerbare header. Gebruik voor vezels de parameter dwStackReserveSize parameter van CreateFiberEx. De vastgelegde grootte wordt opgegeven in de parameter dwStackCommitSize.
Met de functie SetThreadStackGuarantee wordt de minimale grootte van de stack ingesteld die is gekoppeld aan de aanroepende thread of glasvezel die beschikbaar is tijdens eventuele overloop-uitzonderingen voor stacks.