O tamanho máximo padrão da pilha de threads criados em um processo de IIS nativo é de 256 KB

Este artigo apresenta o tamanho máximo padrão da pilha de um thread criado por um processo de IIS ( Serviços de Informações da Internet da Microsoft nativo).

Versão original do produto: Serviços de informações da internet 8.0
Número de KB original: 932909

Resumo

Por padrão, o tamanho máximo da pilha de um thread criado por um processo de IIS nativo é de 256 KB antes do Windows Server 2008. Por exemplo, quando Inetinfo.exe, DLLHost.exe ou W3wp.exe cria um thread no IIS 5.0 ou IIS 6.0, o tamanho máximo da pilha do thread é de 256 KB por padrão. Você também pode chamar explicitamente a função CreateThread para especificar o tamanho da pilha do thread. No Microsoft Windows 2000, se o Microsoft ASP.NET Worker Process (ASPNet_wp.exe) criar um thread, o tamanho máximo da pilha do thread será de 1 MB. No Windows Server 2008 e superior, o tamanho máximo da pilha de um thread em execução na versão de 32 bits do IIS é de 256 KB e em um servidor x64 é de 512 KB.

Observação

O Internet Information Services é uma plataforma de aplicativo Web com vários threads que permite que o código do aplicativo em execução dentro de cada processo de trabalho utilize centenas ou mais threads ao mesmo tempo, conforme necessário. Cada thread é vinculado pelo mesmo limite de tamanho de pilha para manter o uso da memória virtual do processo dentro dos limites gerenciáveis.

Mais informações

O tamanho máximo da pilha de um thread não é determinado por um componente ISAPI, DLL ou ASP individual que está em execução dentro do processo. O tamanho máximo da pilha de um thread é configurado pelo arquivo executável do processo. Se você precisar ter um tamanho de pilha grande, poderá criar programaticamente um thread e definir o tamanho da pilha apropriado. Como alternativa, se o thread ficar sem o tamanho máximo da pilha, você deverá alterar o código no aplicativo para usar a pilha corretamente.

Os argumentos e as variáveis locais de uma função são armazenados na pilha do thread. Se você declarar uma variável local com um valor grande, a pilha será rapidamente esgotada. Por exemplo, a função no exemplo de código a seguir requer 400.000 bytes na pilha para armazenar a matriz.

void func(void)
{
    int i[100000];
    // Use 100,000 integers multiplied by 4 bytes per integer to store the array.
    return;
}

Observação

Você não pode chamar essa função no IIS 4.0, no IIS 5.0, no IIS 5.1 ou no IIS 6.0.

Para evitar o uso da pilha, aloque dinamicamente a memória. Por exemplo, a função no exemplo de código a seguir aloca dinamicamente a memória.

void func(void)
{
    int *i
    
    i = new int[100000];
    // More code goes here.
    return;
}

Observação

Neste exemplo de código, a memória é armazenada no heap em vez da pilha. Portanto, a função não requer 400.000 bytes na pilha para armazenar a matriz.

Se uma função for chamada recursivamente, a pilha poderá ser rapidamente esgotada. Por exemplo, uma função requer 400.000 bytes na pilha se as seguintes condições forem verdadeiras:

  • A função requer 40 bytes para uma variável local.
  • A função é chamada recursivamente 10.000 vezes.

Em um aplicativo CGI (Common Gateway Interface), um thread não tem um tamanho máximo de pilha de 256 KB. Quando você inicia o aplicativo CGI, um novo processo é criado e os arquivos executáveis CGI configuram o tamanho da pilha. Você também pode chamar explicitamente a função CreateThread para especificar o tamanho da pilha do thread.

Para obter mais informações, consulte Thread Stack Size.