私はおそらくアプリケーションにスタックオーバーフローが発生しています(コース外では、リリースモードでのみ...)、保護/調査コードを追加したいと考えています。 私は、現在のスレッドスタックの状態(i..e、合計サイズと使用されているサイズ)を教えてくれるWindows APIを探しています。 誰ですか? (それは、メインスレッドの場合は、プログラムをリンク)スレッドスタックの現在の状態を確認する方法
THX ノーム
私はおそらくアプリケーションにスタックオーバーフローが発生しています(コース外では、リリースモードでのみ...)、保護/調査コードを追加したいと考えています。 私は、現在のスレッドスタックの状態(i..e、合計サイズと使用されているサイズ)を教えてくれるWindows APIを探しています。 誰ですか? (それは、メインスレッドの場合は、プログラムをリンク)スレッドスタックの現在の状態を確認する方法
THX ノーム
スタックの合計サイズは、あなたがスレッドを作成したときを求めスタックのサイズになります。
MSDN(QueryThreadpoolStackInformation
)のWindows 7でスレッドプールのスタックサイズを取得するための予備的な参照がいくつかあります。
近似として、ローカル変数のアドレスとスタックのさらに下の別のローカル変数のアドレスを比較して、量の測定値を得ることができます。私は、Windowsで実行されているプログラムが、仮想メモリ空間にローカル変数を置く方法を考えると、Windowsがスレッドに割り当てるのは、Windowsが本当に知っているものではなく、その言語のランタイムの実装までです。代わりに、スタックに割り当てられたメモリのすぐ下のアドレスにアクセスしようとすると、例外が発生します。
スタックが限界に達したかどうかをチェックするコードを複雑にするもう1つの方法は、スタックが限界に達したことをチェックするときにOSによって呼び出されるEXCEPTION_STACK_OVERFLOW
の例外ハンドラを追加することです。例はhereです。