De forma predeterminada, el tamaño de pila máximo de un subproceso que se crea en un proceso IIS nativo es 256 KB

Se aplica a: Internet Information Services 8.0

Resumen


De forma predeterminada, el tamaño máximo de pila de un subproceso que se crea mediante un proceso nativo de Microsoft Internet Information Services (IIS) es 256 KB antes de Windows Server 2008. Por ejemplo, cuando Inetinfo.exe, DLLHost.exe o W3wp.exe crea un subproceso de IIS 5.0 o IIS 6.0, el tamaño de pila máximo del subproceso es 256 KB de forma predeterminada. Puede llamar también explícitamente la función CreateThread para especificar el tamaño de pila del subproceso. En Microsoft Windows 2000, si el proceso de trabajo de ASP.NET (ASPNet_wp.exe) de Microsoft se crea un subproceso, el tamaño de pila máximo del subproceso es 1 MB. En Windows Server 2008 y versiones posteriores, el tamaño máximo de pila de un subproceso que se ejecuta en la versión de 32 bits de IIS es 256 KB y en un x64 servidor es de 512 KB.

Nota: Servicios de Internet Information Server es una plataforma de aplicación web multiproceso que permite el código de aplicación que se ejecuta dentro de cada proceso de trabajo se utilizan cientos o más subprocesos a la vez, según sea necesarios. Cada subproceso se enlaza por el mismo límite de tamaño de la pila con el fin de mantener el uso de memoria virtual del proceso dentro de unos límites manejables.

Más información


El tamaño máximo de pila de un subproceso no se determina por un componente individual de ISAPI, DLL o ASP que se ejecuta dentro del proceso. El tamaño máximo de pila de un subproceso se configura mediante el archivo ejecutable del proceso. Si debe tener un tamaño de pila grande, puede crear mediante programación un subproceso y, a continuación, establezca el tamaño de pila correspondiente. O bien, si el subproceso se ejecuta fuera del tamaño de pila máximo, debe cambiar el código de la aplicación para utilizar la pila correctamente.

Los argumentos y las variables locales de una función se almacenan en la pila del subproceso. Si se declara una variable local que tiene un valor muy grande, rápidamente se agota la pila. Por ejemplo, la función en el siguiente ejemplo de código requiere 400.000 bytes en la pila para almacenar la matriz.
void func(void)   {
int i[100000];
// Use 100,000 integers multiplied by 4 bytes per integer to store the array.
return;
}

Nota: No se puede llamar a esta función en IIS 4.0, IIS 5.0, IIS 5.1 o IIS 6.0.

Para evitar el uso de la pila, asignar dinámicamente la memoria. Por ejemplo, la función en el siguiente ejemplo de código asigna dinámicamente la memoria.
void func(void)   {
int *i

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

Nota: En este ejemplo de código, la memoria se almacena en el montón en lugar de la pila. Por lo tanto, la función no requiere 400.000 bytes en la pila para almacenar la matriz.

Si se llama de forma recursiva a una función, la pila se puede agotar rápidamente. Por ejemplo, una función requiere 400.000 bytes en la pila si se cumplen las condiciones siguientes:
  • La función requiere 40 bytes de una variable local.
  • La función es recursiva llamado 10.000 veces.
En una aplicación de Common Gateway Interface (CGI), un subproceso no tiene un tamaño de pila máximo de 256 KB. Al iniciar la aplicación CGI, se crea un nuevo proceso y los archivos ejecutables CGI configuran el tamaño de la pila. Puede llamar también explícitamente la función CreateThread para especificar el tamaño de pila del subproceso.

Para obtener más información, visite el siguiente sitio Web de MSDN: