Par défaut, la taille de pile maximale d’un thread qui est créé dans un processus IIS natif est de 256 Ko

S’applique à : Internet Information Services 8.0

Résumé


Par défaut, la taille de pile maximale d’un thread qui est créé par un processus Microsoft Internet Information Services (IIS) natif est 256 Ko avant Windows Server 2008. Par exemple, lorsque Inetinfo.exe, DLLHost.exe ou W3wp.exe crée un thread dans IIS 5.0 ou IIS 6.0, la taille de pile maximale du thread est 256 Ko par défaut. Vous pouvez également appeler explicitement la fonction CreateThread pour spécifier la taille de pile du thread. Dans Microsoft Windows 2000, si le processus de travail Microsoft ASP.NET (ASPNet_wp.exe) crée un thread, la taille de pile maximale du thread est 1 Mo. Dans Windows Server 2008 et supérieur, la taille de pile maximale d’un thread en cours d’exécution sur une version 32 bits d’IIS est de 256 Ko, et sur une x64 server est de 512 Ko.

Remarque : Internet Information Services est une plate-forme d’application web multi-thread qui permet au code d’application en cours d’exécution à l’intérieur de chaque processus de travail utilisent des centaines ou plusieurs threads en même temps que nécessaires. Chaque thread est lié par la même limite de taille de pile pour éviter que l’utilisation de la mémoire virtuelle du processus dans des limites acceptables.

Plus d'informations


La taille de pile maximale d’un thread n’est pas déterminée par un composant ISAPI, DLL ou ASP qui s’exécute dans le processus. La taille de pile maximale d’un thread est configurée par le fichier exécutable du processus. Si vous devez avoir une taille de pile de grande taille, vous pouvez créer par programme un thread et puis définissez la taille de pile appropriée. Ou bien, si le thread s'exécute en dehors de la taille de pile maximale, vous devez modifier le code dans l'application pour utiliser la pile correctement.

Les arguments et les variables locales d’une fonction sont stockés dans la pile du thread. Si vous déclarez une variable locale qui a une valeur très élevée, la pile est saturée rapidement. Par exemple, la fonction dans l’exemple de code suivant nécessite 400 000 octets dans la pile pour stocker le tableau.
void func(void)   {
int i[100000];
// Use 100,000 integers multiplied by 4 bytes per integer to store the array.
return;
}

Remarque Vous ne pouvez pas appeler cette fonction dans IIS 4.0, IIS 5.0, IIS 5.1 ou IIS 6.0.

Pour éviter l’utilisation de la pile, allouer dynamiquement la mémoire. Par exemple, la fonction dans l’exemple de code suivant alloue dynamiquement la mémoire.
void func(void)   {
int *i

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

Remarque Dans cet exemple de code, la mémoire est stockée dans le tas au lieu de la pile. Par conséquent, la fonction ne nécessite pas de 400 000 octets dans la pile pour stocker le tableau.

Si une fonction est appelée de manière récursive, la pile peut être saturée rapidement. Par exemple, une fonction nécessite 400 000 octets dans la pile si les conditions suivantes sont remplies :
  • La fonction requiert 40 octets pour une variable locale.
  • La fonction est appelée 10000 fois de manière récursive.
Dans une application d’Interface CGI (Common Gateway), un thread n’a pas une taille de pile maximale de 256 Ko. Lorsque vous démarrez l’application CGI, un nouveau processus est créé et les fichiers exécutables CGI configurent la taille de la pile. Vous pouvez également appeler explicitement la fonction CreateThread pour spécifier la taille de pile du thread.

Pour plus d’informations, visitez le site Web MSDN suivant :