/Gs (スタック チェック呼び出しの制御)

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

構文

/Gs[サイズ]

引数

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

解説

スタックプローブとは、コンパイラが関数呼び出しの開始時に挿入する一連のコードです。 スタック プローブを開始すると、関数のローカル変数を保存するのに必要なスペースの量に応じてメモリに作用します。 これにより、必要に応じて、関数の残りの部分が実行される前に、オペレーティングシステムが追加のスタックメモリに透過的にページされます。

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

Note

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

—たとえば、仮想デバイスドライバーでは、 — この既定のスタック拡張メカニズムを必要としないプログラムもあります。 このような場合、スタックプローブは必要ありません。また、 サイズ をローカル変数ストレージに必要な任意の関数よりも大きい値に設定することにより、コンパイラが生成されないようにすることができます。

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

X64 ターゲットの場合、サイズ引数なしで/gsオプションを指定すると、 /Gs0と同じになります。 Size引数が 1 ~ 9 の場合、警告 D9014 が出力され、効果は/Gs0を指定した場合と同じになります。

X86、ARM、ARM64 ターゲットの場合、サイズ引数のない/Gsオプションは/Gs4096と同じになります。 Size引数が 1 ~ 9 の場合、警告 D9014 が出力され、効果は/Gs4096を指定した場合と同じになります。

すべてのターゲットについて、10 ~ 2147485647 の サイズ 引数は、しきい値を指定された値に設定します。 サイズが2147485648以上の場合は、致命的なエラー C1049 が発生します。

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

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

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

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

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

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

関連項目

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