2010-03-19 10 views

risposta

9

Sebbene non ci sia un'API per scoprire direttamente la dimensione dello stack, lo spazio di indirizzo virtuale contiguo deve essere riservato fino alla dimensione massima dello stack: è solo che molto spazio non è ancora stato impegnato. È possibile usufruire di questo e effettuare due chiamate a VirtualQuery.

Per la prima chiamata, passare l'indirizzo di qualsiasi valore nello stack per ottenere l'indirizzo di base e la dimensione, in byte, dello spazio di stack impegnato. Su una macchina x86 in cui lo stack cresce verso il basso, sottrarre nuovamente la dimensione dall'indirizzo di base e VirtualQuery: questo ti darà la dimensione dello spazio riservato per lo stack (supponendo che tu non sia esattamente al limite delle dimensioni dello stack al momento). Sommando i due si ottiene naturalmente la dimensione totale dello stack.

+1

Ulteriori informazioni qui: http://stackoverflow.com/questions/1740888/determining-stack-space-with-visual-studio/1747499#1747499 – Philip

6

È possibile ottenere la dimensione corrente impegnata dalla parte superiore e inferiore nella TEB. È possibile ottenere la riserva iniziale del processo e le dimensioni di commit dallo PE header. Ma non è possibile recuperare le dimensioni effettive passate a CreateThread, né esiste alcuna API per ottenere le restanti dimensioni di riservate o impegnate dallo stack corrente, vedere Thread Stack Size.

Problemi correlati