2010-03-19 5 views

Antwort

9

Während es keine API gibt, um die Stapelgröße direkt zu ermitteln, muss zusammenhängender virtueller Adressraum bis zur maximalen Stapelgröße reserviert werden - es ist nur so, dass ein großer Teil dieses Speicherplatzes noch nicht festgeschrieben ist. Sie können dies nutzen und zwei Anrufe an VirtualQuery tätigen.

Für den ersten Aufruf übergeben Sie die Adresse eines beliebigen Werts auf dem Stapel, um die Basisadresse und die Größe des festgelegten Stapelspeichers in Byte zu ermitteln. Bei einer x86-Maschine, bei der der Stapel nach unten wächst, subtrahieren Sie die Größe erneut von der Basisadresse und VirtualQuery. Dadurch erhalten Sie die Größe des für den Stapel reservierten Speicherplatzes (vorausgesetzt, Sie befinden sich gerade nicht an der maximalen Stapelgröße)). Die Summe der beiden ergibt natürlich die Gesamtstapelgröße.

+1

Weitere Informationen finden Sie hier: http://StackOverflow.com/Questions/1740888/Emtermining-Stack-Space-with-visual-studio/1747499#1747499 – Philip

6

Sie können die aktuelle Commit-Größe von oben und unten in TEB abrufen. Sie können die anfängliche Reserve- und Commit-Größe des Prozesses von PE header abrufen. Sie können jedoch nicht die tatsächlichen Größen abrufen, die an CreateThread übergeben wurden, noch gibt es eine API, um die verbleibende Größe des reservierten oder vom aktuellen Stack festgeschriebenen Werts zu ermitteln, siehe Thread Stack Size.