/Gs
(コントロール スタックチェック呼び出し)
スタック プローブのしきい値を制御します。
構文
/Gs
[size
]
引数
size
(オプション) スタック プローブが開始される前にローカル変数が占有することのできるバイト数。 と size
. の間/Gs
に空白は使用できません。
解説
"スタック プローブ" とは、コンパイラが関数呼び出しの開始時に挿入するコードのシーケンスのことです。 開始されると、スタック プローブは、関数のローカル変数を格納するために必要な領域の量によってメモリに無害に到達します。 このプローブにより、オペレーティング システムは、必要に応じて、関数の残りの部分を実行する前に、より多くのスタック メモリを透過的にページングします。
既定で、関数に 1 ページを超えるスタック領域が必要な場合、コンパイラはスタック プローブを開始するコードを生成します。 この既定値は、x86、x64、ARM、ARM64 プラットフォームのコンパイラ オプション /Gs4096
と同じです。 この値により、アプリケーションと Windows メモリ マネージャーは、実行時に動的にプログラム スタックにコミットされるメモリの量を増やすことができます。
Note
既定値 /Gs4096
を指定すると、Windows 用アプリケーションのプログラム スタックが実行時に正しく拡張されます。 既定値は、変更理由が明確でない限り変えないことをお勧めします。
一部のプログラム (仮想デバイス ドライバーなど) では、この既定のスタック拡張メカニズムは必要ありません。 このような場合、スタック プローブは必要ありません。また、ローカル変数ストレージに必要な関数よりも大きい値に設定 size
することで、コンパイラによる生成を停止できます。
/Gs0
は、ローカル変数のストレージを必要とするすべての関数呼び出しに対してスタック プローブを開始します。 この値は、パフォーマンスに悪影響を与える可能性があります。
x64 ターゲットの場合、引数を指定せずにオプションを/Gs
size
指定すると、/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
替えることができます。 /Gs
check_stack
プラグマは標準の C ライブラリ ルーチンには影響しません。コンパイルした関数にのみ影響します。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
[追加のオプション] に /Gs コンパイラ オプションと省略可能なサイズを入力します。 [OK] または [適用] を選択して、変更内容を保存します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。AdditionalOptions
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示