/GF(消除重复的字符串)

使编译器在执行过程中能够在程序映像和内存中创建相同字符串的单个副本。 这是一种称为字符串池的优化方法,可以创建较小的程序。

语法

/GF

备注

如果使用 /GF,则操作系统不会交换内存的字符串部分,并且可以从映像文件读取字符串。

/GF 池字符串为只读。 如果尝试修改 /GF 下的字符串,则会发生应用程序错误。

字符串池允许原本为指向多个缓冲区的多个指针变成指向单个缓冲区的多个指针。 在以下代码中,st 使用同一字符串进行初始化。 字符串池导致它们指向同一内存:

char *s = "This is a character buffer";
char *t = "This is a character buffer";

注意

用于编辑并继续的 /ZI 选项会自动设置 /GF 选项。

注意

/GF 编译器选项为每个唯一字符串创建可寻址节。 默认情况下,对象文件最多可以包含 65,536 个可寻址节。 如果程序包含的字符串数超过 65,536 个,请使用 /bigobj 编译器选项创建更多节。

/GF 会在使用 /O1/O2 时生效。

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“代码生成”属性页面

  3. 修改“启用字符串池”属性。

以编程方式设置此编译器选项

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法