/Gs (スタック チェック呼び出しの制御)
スタック プローブを制御します。
/Gs[size]
引数
- size
(オプション) スタック プローブが開始される前にローカル変数が占有することのできるバイト数。 /Gs オプションが size 引数なしで指定された場合、/Gs0 を指定するのと同じことになります。
解説
スタック プローブとは、コンパイラがすべての関数呼び出しに挿入するコードのシーケンスのことです。 スタック プローブを開始すると、関数のローカル変数を保存するのに必要なスペースの量に応じてメモリに作用します。
関数でローカル変数用に size バイトを超えるスタック領域が必要な場合、スタック プローブが開始されます。 既定で、関数に 1 ページを超えるスタック領域が必要な場合、コンパイラはスタック プローブを開始するコードを生成します。 これは、x86 の /Gs4096、x64、および ARM プラットフォームのコンパイラ オプションと同等です。 この値により、アプリケーションと Windows メモリ マネージャーは、実行時に動的にプログラム スタックにコミットされるメモリの量を増やすことができます。
注意
/Gs4096 の既定値により、Windows のアプリケーションのプログラム スタックは実行時に正常に増加することができます。既定値は、変更理由が明確でない限り変えないことをお勧めします。
仮想デバイス ドライバーなど一部のプログラムでは、この既定のスタック増加メカニズムは必要ありません。 そのような場合、スタック プローブは必要ではありません。コンパイラがそれらを生成しないようにするには、ローカル変数ストレージでどの関数が必要とする値よりも size の値を大きく設定します。 /Gs と size の間には空白を入れられません。
/Gs0 は、ローカル変数のストレージが必要なすべての関数呼び出しでスタック プローブをアクティベートします。 これはパフォーマンスに対して悪影響を及ぼす可能性があります。
スタック プローブの有効/無効は、check_stack で切り替えることができます。 /Gs および check_stack プラグマは標準 C ライブラリ ルーチンに影響を及ぼしません。コンパイルする関数にのみ影響します。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。
[C/C++] フォルダーを選択します。
[コマンド ライン] プロパティ ページを選択します。
[追加のオプション]ボックスにコンパイラ オプションを入力します。
このコンパイラ オプションをコードから設定するには
- 「AdditionalOptions」を参照してください。