10

実行中のスレッドのスタックサイズを決定するための呼び出しはありますか?MSDNスレッド関数のドキュメントを調べていましたが、見つからないようです。

4

2 に答える 2

10

スタックサイズを直接検出するAPIはありませんが、連続する仮想アドレススペースは最大スタックサイズまで予約する必要があります。そのスペースの多くがまだコミットされていないだけです。これを利用して、 VirtualQueryを2回呼び出すことができます。

最初の呼び出しでは、スタック上の任意の値のアドレスを渡して、コミットされたスタックスペースのベースアドレスとサイズ(バイト単位)を取得します。スタックが下に大きくなるx86マシンでは、ベースアドレスとVirtualQueryからサイズを再度減算します。これにより、スタック用に予約されたスペースのサイズが得られます(その時点でスタックサイズの制限に正確に達していない場合) )。2つを合計すると、当然、合計スタックサイズが得られます。

于 2010-03-19T20:38:02.513 に答える
7

TEBのTopとBottomから現在コミットされているサイズを取得できます。PEヘッダーからプロセスの初期予約とコミットのサイズを取得できます。ただし、 CreateThreadに渡された実際のサイズを取得することはできません。また、現在のスタックから予約またはコミットされた残りのサイズを取得するAPIもありません。スレッドスタックサイズを参照してください。

于 2010-03-19T20:04:52.670 に答える