/GF (同一文字列の削除)
コンパイラで、プログラム イメージおよび実行時のメモリに同一文字列の 1 つのコピーを作成できます。 これは "文字列プール" と呼ばれる最適化であり、これによりプログラムのサイズが小さくなります。
構文
/GF
解説
/GF を使用する場合、オペレーティング システムではメモリの文字列部分がスワップされず、イメージ ファイルから文字列を読み取ることができます。
/GF プール文字列は読み取り専用です。 /GF で文字列を変更しようとすると、アプリケーション エラーが発生します。
文字列プールでは、複数のバッファーへの複数のポインターとして意図されたものを、1 つのバッファーへの複数のポインターとすることができます。 次のコードでは、s
と t
が同じ文字で初期化されています。 文字列プールにより、それらが同じメモリを指すようになります。
char *s = "This is a character buffer";
char *t = "This is a character buffer";
Note
エディット コンティニュに使用される /ZI オプションにより、/GF オプションが自動的に設定されます。
Note
/GF コンパイラ オプションを使用すると、一意の文字列ごとにアドレス指定可能なセクションが作成されます。 既定では、オブジェクト ファイルにはアドレス指定可能なセクションを最大 65,536 個含めることができます。 プログラムに 65,536 個を超える文字列が含まれている場合は、/bigobj コンパイラ オプションを使用して、さらにセクションを作成します。
/GF は、/O1 または /O2 を使用する場合のみ有効になります。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コード生成] プロパティ ページを選択します。
[文字列プール] プロパティを変更します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。StringPooling