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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários