2010-11-03 12 views
7

Il Windows Internal book 5th edition ha il seguente commento in pagina 360.Lo stack .NET vs di Windows pila

 
The stack size for the initial thread is taken from the image—there’s no way 
to specify another size. 

Capisco che per sistemi operativi Windows, ogni thread viene dato 4K o 16K (a seconda del sistema) pila, e la la dimensione è fissa

Quindi che ne dici dello stack in .NET?

  • Quanto è grande lo stack?
  • La dimensione della pila è fissa o variabile?
  • Lo stack allocato per ogni thread è simile al caso di Windows?
+0

correlati: http://stackoverflow.com/questions/1042345/how-do-you-change-default-stack-size-for-managed-executable-net –

risposta

9

Sì, il formato per il filo di avvio è determinato da un valore nell'intestazione del file exe. Necessariamente così, è il sistema operativo che crea il thread, prima di qualsiasi codice nel programma può essere eseguito. Chiama il punto di accesso del programma, CorExeMain().

Il compilatore gestito che si utilizza scrive quel valore nell'intestazione del file EXE. I compilatori .NET correnti selezionano 1 MB quando si seleziona x86 o Qualsiasi CPU, 4 MB quando si seleziona x64. Questo tuttavia non è fisso, è possibile modificare il valore con l'utilità Editbin.exe, l'opzione della riga di comando/STACK. Si potrebbe utilizzare questo evento post-generazione per ottenere una pila 2MB:

set path=%path%;$(DevEnvDir);$(DevEnvDir)..\..\vc\bin 
    editbin.exe /STACK:2097152 "$(TargetPath)" 

La dimensione dello stack per le discussioni che si creano da soli sono sotto il vostro controllo, il costruttore della classe Thread has overloads che consente di specificare le dimensioni. Non è possibile renderlo troppo piccolo, se ritaglia il valore su 256 KB. È necessario, anche il compilatore just-in-time utilizza lo stack.

0

Ecco uno similar discussion sull'argomento.

Domanda

La documentazione indica che il thread "dimensione dello stack di default" è 1 MB. Il lavoro "predefinito" implica che può essere modificato.

È possibile modificare StackSize in .NET? Se é cosi, come?

risposta

Purtroppo no. La documentazione che stavi leggendo era per la creazione di nuovi thread nel sistema, che è gestita dalla classe Thread. La funzione API CreateThread consente di impostare le dimensioni dello stack e si può chiamare da .NET. Tuttavia, non so se sia una buona idea, dal momento che sono non sono sicuro di come il runtime percepirà quel thread.

Ecco un esempio di codice per creare thread usando l'API CreateThread

http://www.codeproject.com/KB/threads/Threads_1.aspx