/GL(全程序优化)

启用全程序优化。

语法

/GL[-]

备注

全程序优化允许编译器利用程序所有模块的信息执行优化。 无全程序优化的情况下,则对每个模块(编译单位)执行优化。

默认情况下,全程序优化处于禁用状态,必须显式启用。 但是,也可以使用 /GL- 显式禁用它。

利用所有模块的信息,编译器可以:

  • 优化寄存器跨函数边界的使用。

  • 更好地跟踪对全局数据的修改,从而减少负载量和存储量。

  • 跟踪指针取消引用修改的可能项集,减少所需的负载量和存储量。

  • 即使在某个模块中定义了函数,也可以在另一个模块中内联该函数。

EDITBINDUMPBIN 等链接器实用工具无法使用通过 /GL 生成的 .obj 文件。

如果使用 /GL/c 编译程序,则应使用 /LTCG 链接器选项创建输出文件。

/ZI 无法与 /GL 结合使用

更高版本的 Visual Studio 和 MSVC 工具集通常无法读取当前版本中使用 /GL 生成的文件的格式。 除非要为你希望用户现在和将来使用的所有 Visual Studio 版本提供 .lib 文件副本,否则请勿提供一个由 /GL 生成的 .obj 文件组成的 .lib 文件。 有关详细信息,请参阅二进制兼容性限制

除非在生成 /GL.obj 文件的同一台计算机上链接 .lib 文件,否则不应使用 /GL 生成的 .obj 文件和预编译标头文件生成 .lib 文件。 链接时需要 .obj 文件预编译标头文件中的信息。

有关全程序优化的可用优化和限制的详细信息,请参阅 /LTCG/GL 还能实现按配置优化。 编译按配置优化时,如果要从按配置优化进行函数排序,则必须使用 /Gy 或表示 /Gy 的编译器选项进行编译。

在 Visual Studio 开发环境中设置此链接器选项

有关如何在开发环境中指定 /GL 的详细信息,请参阅 /LTCG(链接时代码生成)

以编程方式设置此链接器选项

另请参阅

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