/Gs(コントロール スタックチェック呼び出し)

スタック プローブのしきい値を制御します。

構文

/Gs[size]

引数

size
(オプション) スタック プローブが開始される前にローカル変数が占有することのできるバイト数。 と size. の間/Gsに空白は使用できません。

解説

"スタック プローブ" とは、コンパイラが関数呼び出しの開始時に挿入するコードのシーケンスのことです。 開始されると、スタック プローブは、関数のローカル変数を格納するために必要な領域の量によってメモリに無害に到達します。 このプローブにより、オペレーティング システムは、必要に応じて、関数の残りの部分を実行する前に、より多くのスタック メモリを透過的にページングします。

既定で、関数に 1 ページを超えるスタック領域が必要な場合、コンパイラはスタック プローブを開始するコードを生成します。 この既定値は、x86、x64、ARM、ARM64 プラットフォームのコンパイラ オプション /Gs4096 と同じです。 この値により、アプリケーションと Windows メモリ マネージャーは、実行時に動的にプログラム スタックにコミットされるメモリの量を増やすことができます。

Note

既定値 /Gs4096 を指定すると、Windows 用アプリケーションのプログラム スタックが実行時に正しく拡張されます。 既定値は、変更理由が明確でない限り変えないことをお勧めします。

一部のプログラム (仮想デバイス ドライバーなど) では、この既定のスタック拡張メカニズムは必要ありません。 このような場合、スタック プローブは必要ありません。また、ローカル変数ストレージに必要な関数よりも大きい値に設定 size することで、コンパイラによる生成を停止できます。

/Gs0 は、ローカル変数のストレージを必要とするすべての関数呼び出しに対してスタック プローブを開始します。 この値は、パフォーマンスに悪影響を与える可能性があります。

x64 ターゲットの場合、引数を指定せずにオプションを/Gssize指定すると、/Gs0 引数が size 1 から 9 の場合、コンパイラは警告 D9014 を出力し、効果は指定と /Gs0同じです。

x86、ARM、ARM64 ターゲットの場合、引数を /Gs 指定 size しないオプションは /Gs4096. 引数が size 1 から 9 の場合、コンパイラは警告 D9014 を出力し、効果は指定と /Gs4096同じです。

すべてのターゲットに対して size 、10 ~ 2147483647の引数によって、指定した値にしきい値が設定されます。 2147483648 size 以上の場合、致命的なエラー C1049 が発生します。

ディレクティブを使用して、スタック プローブのオンとオフを切り check_stack 替えることができます。 /Gscheck_stackプラグマは標準の C ライブラリ ルーチンには影響しません。コンパイルした関数にのみ影響します。

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。

  3. [追加のオプション]/Gs コンパイラ オプションと省略可能なサイズを入力します。 [OK] または [適用] を選択して、変更内容を保存します。

このコンパイラ オプションをコードから設定するには

関連項目

MSVC コンパイラ オプション
MSVC コンパイラのコマンド ライン構文