El tamaño máximo predeterminado de pila de subprocesos creados en un proceso de IIS nativo es de 256 KB.

En este artículo se presenta el tamaño de pila máximo predeterminado de un subproceso creado por un proceso nativo de Microsoft Internet Information Services (IIS).

Versión del producto original: Internet Information Services 8.0
Número de KB original: 932909

Resumen

De forma predeterminada, el tamaño máximo de pila de un subproceso creado por un proceso de IIS nativo es de 256 KB antes de Windows Server 2008. Por ejemplo, cuando Inetinfo.exe, DLLHost.exe o W3wp.exe crea un subproceso en IIS 5.0 o IIS 6.0, el tamaño máximo de pila del subproceso es de 256 KB de forma predeterminada. También puede llamar explícitamente a la función CreateThread para especificar el tamaño de pila del subproceso. En Microsoft Windows 2000, si el proceso de trabajo de Microsoft ASP.NET (ASPNet_wp.exe) crea un subproceso, el tamaño máximo de pila del subproceso es de 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 de 256 KB y en un servidor x64 es de 512 KB.

Nota:

Internet Information Services es una plataforma de aplicaciones web multiproceso que permite que el código de aplicación que se ejecuta dentro de cada proceso de trabajo use cientos o más subprocesos a la vez según sea necesario. Cada subproceso está enlazado por el mismo límite de tamaño de pila para mantener el uso de memoria virtual del proceso dentro de los límites administrables.

Más información

El tamaño máximo de pila de un subproceso no viene determinado por un componente ISAPI, DLL o ASP individual que se ejecuta dentro del proceso. El archivo ejecutable del proceso configura el tamaño máximo de pila de un subproceso. Si debe tener un tamaño de pila grande, puede crear mediante programación un subproceso y, a continuación, establecer el tamaño de pila adecuado. Como alternativa, si el subproceso se queda sin el tamaño máximo de pila, debe cambiar el código de la aplicación para usar la pila correctamente.

Los argumentos y las variables locales de una función se almacenan en la pila del subproceso. Si declara una variable local que tiene un valor grande, la pila se agota rápidamente. Por ejemplo, la función del ejemplo de código siguiente 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, en IIS 5.0, en IIS 5.1 o en IIS 6.0.

Para evitar el uso de la pila, asigne dinámicamente la memoria. Por ejemplo, la función del ejemplo de código siguiente 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 en la pila. Por lo tanto, la función no requiere 400 000 bytes en la pila para almacenar la matriz.

Si una función se llama de forma recursiva, la pila puede agotarse 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 para una variable local.
  • La función se llama de forma recursiva 10 000 veces.

En una aplicación de interfaz de puerta de enlace común (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 de CGI configuran el tamaño de la pila. También puede llamar explícitamente a la función CreateThread para especificar el tamaño de pila del subproceso.

Para obtener más información, vea Tamaño de pila de subprocesos.