アプリケーションでスタック オーバーフローが発生する可能性があり (もちろん、リリース モードでのみ...)、それに保護/調査コードを追加したいと考えています。スレッド スタックの現在の状態 (つまり、合計サイズと使用済みサイズ) を教えてくれる Windows API を探しています。誰でも ?
thxノーム
スタックの合計サイズは、スレッドを作成した (メイン スレッドの場合はプログラムをリンクした) ときに要求したスタックのサイズになります。
MSDN の Windows 7 でスレッド プールのスタック サイズを取得するための予備的な参照がいくつかあります ( QueryThreadpoolStackInformation
)。
概算として、ローカル変数のアドレスを、スタックのさらに下にある別のローカル変数のアドレスと比較して、私たちの量の尺度を得ることができます。ウィンドウで実行されているプログラムが、ウィンドウがスレッドに割り当てる仮想メモリ空間にローカル変数を配置する方法を選択する方法は、Windowsが実際に知っていることではなく、その言語のランタイムの実装次第だと思います。代わりに、スタックに割り当てられたメモリのすぐ下のアドレスにアクセスしようとすると例外が発生します。
スタックが制限に達したかどうかのチェックでコードを複雑にするもう 1 つの方法は、スタックが制限に達したEXCEPTION_STACK_OVERFLOW
ことをチェックするときに OS によって呼び出される の例外ハンドラを追加することです。ここに例があります。