El tamaño de pila máximo predeterminado de subprocesos creados en un proceso 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 de Microsoft Internet Information Services nativo (IIS).

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

Resumen

De forma predeterminada, el tamaño máximo de pila de un subproceso creado por un proceso 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 puedes 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 una 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 la 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 límites manejables.

Más información

El tamaño máximo de pila de un subproceso no está 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 la pila, debe cambiar el código de la aplicación para que use la pila correctamente.

Los argumentos y las variables locales de una función se almacenan en la pila del subproceso. Si declaras una variable local que tiene un valor grande, la pila se agota rápidamente. Por ejemplo, la función del 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 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 usar la pila, asigne dinámicamente la memoria. Por ejemplo, la función del 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 en la pila. Por lo tanto, la función no requiere 400.000 bytes en la pila para almacenar la matriz.

Si se llama a una función de forma recursiva, es posible que la pila se agote rápidamente. Por ejemplo, una función requiere 400.000 bytes en la pila si se cumplen las siguientes condiciones:

  • 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 puedes 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.