La taille de pile maximale par défaut des threads créés dans un processus IIS natif est de 256 Ko

Cet article présente la taille de pile maximale par défaut d’un thread créé par un processus Microsoft Internet Information Services natif (IIS).

Version du produit d’origine : Internet Information Services 8.0
Numéro de la base de connaissances d’origine : 932909

Résumé

Par défaut, la taille maximale de pile d’un thread créé par un processus IIS natif est de 256 Ko avant Windows Server 2008. Par exemple, quand Inetinfo.exe, DLLHost.exe ou W3wp.exe crée un thread dans IIS 5.0 ou IIS 6.0, la taille maximale de pile du thread est de 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 de 1 Mo. Dans Windows Server 2008 et versions ultérieures, la taille maximale de pile d’un thread s’exécutant sur la version 32 bits d’IIS est de 256 Ko et sur un serveur x64 est de 512 Ko.

Remarque

Internet Information Services est une plateforme d’application web multithread qui permet au code d’application s’exécutant à l’intérieur de chaque processus de travail d’utiliser des centaines ou plus de threads à la fois si nécessaire. Chaque thread est lié par la même limite de taille de pile afin de maintenir l’utilisation de la mémoire virtuelle du processus dans des limites gérables.

Plus d’informations

La taille de pile maximale d’un thread n’est pas déterminée par un composant ISAPI, DLL ou ASP individuel qui s’exécute à l’intérieur du processus. La taille de pile maximale d’un thread est configurée par le fichier exécutable du processus. Si vous devez avoir une grande taille de pile, vous pouvez créer par programme un thread, puis définir la taille de pile appropriée. Sinon, si le thread n’a plus 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 élevée, la pile est rapidement épuisée. 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 d’utiliser la pile, allouez 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 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 rapidement épuisée. Par exemple, une fonction nécessite 400 000 octets dans la pile si les conditions suivantes sont remplies :

  • La fonction nécessite 40 octets pour une variable locale.
  • La fonction est appelée de manière récursive 10 000 fois.

Dans une application CGI (Common Gateway Interface), 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, consultez Taille de la pile des threads.