Gibt es einen Aufruf, um die Stapelgröße eines laufenden Threads zu ermitteln? Ich habe in der MSDN-Thread-Funktionen-Dokumentation gesucht und kann keine finden.Threadstapelgröße unter Windows (Visual C++)
Antwort
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.
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.
Weitere Informationen finden Sie hier: http://StackOverflow.com/Questions/1740888/Emtermining-Stack-Space-with-visual-studio/1747499#1747499 – Philip