/GT
(スレッド ローカル ストレージを使用したファイバー保護のサポート)
静的スレッド ローカル ストレージを使用して割り当てられたデータ (つまり、__declspec(thread)
を使用して割り当てられたデータ) に対して、ファイバー保護をサポートします。
構文
/GT
解説
__declspec(thread)
で宣言されたデータは、スレッド ローカル ストレージ (TLS) 配列を通じて参照されます。 TLS 配列は、システムが各スレッドに対して保持するアドレスの配列です。 この配列内の各アドレスによって、スレッド ローカル ストレージ データの場所が指定されます。
ファイバーは、スタックとレジスタ コンテキストで構成される軽量オブジェクトであり、さまざまなスレッドでスケジュールできます。 ファイバーは任意のスレッドで実行できます。 ファイバーはスワップアウトされ、後で別のスレッドで再起動される可能性があるため、コンパイラでは TLS 配列のアドレスをキャッシュしない必要があります。または、関数呼び出し全体で共通の部分式として最適化します。 /GT
は、このような最適化を防止します。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[最適化] プロパティ ページを選択します。
[ファイバー保護の最適化] プロパティを変更します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。EnableFiberSafeOptimizations