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

/GT (スレッド ローカル ストレージを使用したファイバー保護のサポート)

 

公開日: 2016年7月

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

静的スレッド ローカル ストレージに割り当てられたデータ、つまり __declspec(thread) で割り当てられたデータに対して、ファイバー保護をサポートします。

/GT  

__declspec(thread) を使って宣言されたデータは、スレッド ローカル ストレージ (TLS: Thread-Local Storage) の配列を通じて参照されます。 TLS 配列とは、スレッドごとにシステムで維持されるアドレスの配列です。 この配列の各アドレスは、スレッド ローカル ストレージのデータ位置を示します。

ファイバーは、軽量オブジェクトです。スタックとレジスタのコンテキストから構成され、さまざまなスレッドでスケジュールできます。 ファイバーは、どのスレッドでも動作可能です。 ファイバーはスワップ アウト後に別のスレッドで再起動されることがあるため、関数呼び出しにわたる共通の部分式として TLS 配列のアドレスをキャッシュしたり最適化したりしないでください。詳細については、「/Og (グローバルの最適化) オプション」に関するトピックを参照してください。 /GT は、このような最適化を抑止します。

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

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

  2. [C/C++] フォルダーをクリックします。

  3. [最適化] プロパティ ページをクリックします。

  4. [ファイバー保護の最適化] プロパティを変更します。

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

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

表示: