De maximale stackgrootte van een thread die wordt gemaakt in een eigen IIS-proces is 256 KB

Van toepassing: Internet Information Services 8.0

Samenvatting


De maximale stackgrootte van een thread die wordt gemaakt door een native Microsoft Internet Information Services (IIS)-proces is 256 KB voor Windows Server 2008. Bijvoorbeeld wanneer Inetinfo.exe en DLLHost.exe W3wp.exe een thread in IIS 5.0 of IIS 6.0 maakt, is de maximale stackgrootte van de thread 256 KB standaard. U kunt ook expliciet roept de functie CreateThread om op te geven van de stackgrootte van de thread. Als het Microsoft ASP.NET-werkproces (ASPNet_wp.exe) een thread maakt, is de stapel maximale grootte van de thread in Microsoft Windows 2000 1 MB. De maximale stackgrootte van een thread uitgevoerd op 32-bits versie van IIS is 256 KB in Windows Server 2008 en hoger, en op een x64 server is 512 KB.

Opmerking: Internet Information Services is een platform voor webtoepassingen met meerdere threads die toepassingscodes uitgevoerd onder elk werkproces honderden gebruiken of meer threads tegelijk zo nodig. Elke thread afhankelijk is van dezelfde limiet voor de stapel om te voorkomen dat het gebruik van virtueel geheugen van het proces hanteerbaar blijft.

Meer informatie


De maximale stackgrootte van een thread wordt niet bepaald door een afzonderlijke ISAPI-dll- of ASP-onderdeel dat wordt uitgevoerd binnen het proces. De maximale stackgrootte van een thread is geconfigureerd door het uitvoerbare bestand van het proces. Als u de grootte van een grote stapel hebt nodig, kunt u via programmering een thread maken en stel de juiste stackgrootte. Als de thread wordt uit de stapel op maximale grootte is uitgevoerd, moet u ook de code in de toepassing correct gebruik van de stapel wijzigen.

De argumenten en de lokale variabelen van een functie worden opgeslagen in de stack van de thread. Als u een lokale variabele met een zeer grote waarde declareert, wordt de stack snel uitgeput. De functie in de volgende voorbeeldcode vereist bijvoorbeeld 400.000 bytes in de stack voor het opslaan van de matrix.
void func(void)   {
int i[100000];
// Use 100,000 integers multiplied by 4 bytes per integer to store the array.
return;
}

Opmerking U kunt deze functie niet aanroepen in IIS 4.0, IIS 5.0, IIS 5.1 of IIS 6.0.

Als u wilt voorkomen dat met behulp van de stack, het geheugen dynamisch worden toegewezen. De functie in het volgende voorbeeld wijst bijvoorbeeld dynamisch geheugen.
void func(void)   {
int *i

i = new int[100000];
// More code goes here.
return;
}

Opmerking In dit voorbeeld wordt het geheugen opgeslagen in de heap in plaats van de stack. De functie vereist dus geen 400.000 bytes in de stack voor het opslaan van de matrix.

Als een functie wordt aangeroepen recursief, kan de stack snel uitgeput zijn. Bijvoorbeeld vereist een functie 400.000 bytes in de stapel als de volgende voorwaarden voldaan wordt:
  • De functie vereist 40 bytes voor een lokale variabele.
  • De functie is recursief 10.000 keer genoemd.
In een toepassing Common Gateway Interface (CGI) heeft een thread geen een stapel maximale grootte van 256 KB. Bij het starten van de CGI-toepassing een nieuw proces gemaakt en de CGI uitvoerbare bestanden configureert u de stackgrootte. U kunt ook expliciet roept de functie CreateThread om op te geven van de stackgrootte van de thread.

Ga naar de volgende MSDN-website voor meer informatie: