Visual Studio 2017 を使用することをお勧めします

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

 

公開日: 2016年7月

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

スタック プローブを制御します。

/Gs[size]  

size
(オプション) スタック プローブが開始される前にローカル変数が占有することのできるバイト数。 /Gs オプションが size 引数なしで指定された場合、/Gs0 を指定するのと同じことになります。

スタック プローブとは、コンパイラがすべての関数呼び出しに挿入するコードのシーケンスのことです。 スタック プローブを開始すると、関数のローカル変数を保存するのに必要なスペースの量に応じてメモリに作用します。

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

System_CAPS_ICON_note.jpg メモ

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

仮想デバイス ドライバーなど一部のプログラムでは、この既定のスタック増加メカニズムは必要ありません。 そのような場合、スタック プローブは必要ではありません。コンパイラがそれらを生成しないようにするには、ローカル変数ストレージでどの関数が必要とする値よりも size の値を大きく設定します。 /Gssize の間には空白を入れられません。

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

スタック プローブの有効/無効は、check_stack で切り替えることができます。 /Gs および check_stack プラグマは標準 C ライブラリ ルーチンに影響を及ぼしません。コンパイルする関数にのみ影響します。

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

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。

  2. [C/C++] フォルダーを選択します。

  3. [コマンド ライン] プロパティ ページを選択します。

  4. [追加のオプション]ボックスにコンパイラ オプションを入力します。

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

コンパイラ オプション
コンパイラ オプションの設定

表示: