La dimensione massima dello stack predefinita dei thread creati in un processo IIS nativo è di 256 KB

Questo articolo introduce le dimensioni massime predefinite dello stack di un thread creato da un processo di Microsoft Internet Information Services nativo (IIS).

Versione originale del prodotto: Internet Information Services 8.0
Numero KB originale: 932909

Riepilogo

Per impostazione predefinita, le dimensioni massime dello stack di un thread creato da un processo IIS nativo sono di 256 KB prima di Windows Server 2008. Ad esempio, quando Inetinfo.exe, DLLHost.exe o W3wp.exe crea un thread in IIS 5.0 o IIS 6.0, la dimensione massima dello stack del thread è di 256 KB per impostazione predefinita. È anche possibile chiamare in modo esplicito la funzione CreateThread per specificare le dimensioni dello stack del thread. In Microsoft Windows 2000, se il processo di lavoro di Microsoft ASP.NET (ASPNet_wp.exe) crea un thread, la dimensione massima dello stack del thread è di 1 MB. In Windows Server 2008 e versioni successive, la dimensione massima dello stack di un thread in esecuzione nella versione a 32 bit di IIS è di 256 KB e in un server x64 è 512 KB.

Nota

Internet Information Services è una piattaforma di applicazioni Web multithreading che consente al codice dell'applicazione in esecuzione all'interno di ogni processo di lavoro di utilizzare centinaia o più thread contemporaneamente, se necessario. Ogni thread è associato allo stesso limite di dimensioni dello stack per mantenere l'utilizzo della memoria virtuale del processo entro limiti gestibili.

Ulteriori informazioni

Le dimensioni massime dello stack di un thread non sono determinate da un singolo componente ISAPI, DLL o ASP in esecuzione all'interno del processo. Le dimensioni massime dello stack di un thread sono configurate dal file eseguibile del processo. Se è necessario avere dimensioni dello stack di grandi dimensioni, è possibile creare a livello di codice un thread e quindi impostare le dimensioni dello stack appropriate. In alternativa, se il thread esaurisce le dimensioni massime dello stack, è necessario modificare il codice nell'applicazione per usare correttamente lo stack.

Gli argomenti e le variabili locali di una funzione vengono archiviati nello stack del thread. Se si dichiara una variabile locale con un valore elevato, lo stack viene rapidamente esaurito. Ad esempio, la funzione nell'esempio di codice seguente richiede 400.000 byte nello stack per archiviare la matrice.

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

Nota

Non è possibile chiamare questa funzione in IIS 4.0, IIS 5.0, IIS 5.1 o IIS 6.0.

Per evitare di usare lo stack, allocare dinamicamente la memoria. Ad esempio, la funzione nell'esempio di codice seguente alloca dinamicamente la memoria.

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

Nota

In questo esempio di codice la memoria viene archiviata nell'heap anziché nello stack. Pertanto, la funzione non richiede 400.000 byte nello stack per archiviare la matrice.

Se una funzione viene chiamata in modo ricorsivo, lo stack potrebbe esaurirsi rapidamente. Ad esempio, una funzione richiede 400.000 byte nello stack se si verificano le condizioni seguenti:

  • La funzione richiede 40 byte per una variabile locale.
  • La funzione viene chiamata in modo ricorsivo 10.000 volte.

In un'applicazione Common Gateway Interface (CGI) un thread non ha dimensioni massime dello stack di 256 KB. Quando si avvia l'applicazione CGI, viene creato un nuovo processo e i file eseguibili CGI configurano le dimensioni dello stack. È anche possibile chiamare in modo esplicito la funzione CreateThread per specificare le dimensioni dello stack del thread.

Per altre informazioni, vedere Dimensione dello stack di thread.