/LTCG(链接时代码生成)

/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]

备注

  • :NOSTATUS | :STATUS(可选)
    指定链接器是否显示进度指示器,显示完成百分比的链接。默认情况下不显示此状态信息。

  • :PGINSTRUMENT(可选)
    指定链接器将输出.pgd 文件,以准备的检测测试运行的应用程序上。您可以使用 /PGD 选项指定的文件的名称或.pgd 文件的位置。

    从检测运行中收集的数据用于创建优化的映像。有关更多信息,请参见按配置优化。此选项的缩写形式为 /LTCG:PGI。

  • :PGOPTIMIZE(可选)
    指定链接器用来创建优化的映像运行检测的二进制文件后创建的配置文件数据。所有输入的文件必须在 /LTCG:PGI 中指定的文件相同。有关更多信息,请参见按配置优化。此选项的缩写形式为 /LTCG:PGO。

  • :PGUPDATE(可选)
    允许添加或修改从内容中指定的输入文件的列表: PGINSTRUMENT 阶段。但是,任何新的输入的文件未得到优化使用按配置优化,并且已修改的输入文件的更改导致为该代码在检测阶段收集的配置文件数据无效的部分未得到优化使用按配置优化。有关更多信息,请参见按配置优化。此选项的缩写形式为 /LTCG:PGU。

/LTCG 选项通知链接器调用编译器并执行全程序优化。还可以进行按配置优化。有关更多信息,请参见按配置优化

以下例外情况外,您不能将链接器选项添加到 /LTCG:PGOPTIMIZE,或未指定在运行 /LTCG:PGINSTRUMENT /LTCG:PGUPDATE 运行的:

指定 /LTCG:PGOPTIMIZE ; 其不具有任何链接器选项指定的 /LTCG:PGINSTRUMENT 它们都被表达出来。

本主题的其余部分在链接时代码生成方面讨论 /LTCG。

/LTCG 隐式地与 /GL 一起使用。

如果它通过使用编译的模块,链接器调用链接时代码生成**/GL或 MSIL 模块 (请参阅用作链接器输入的 .netmodule 文件)。如果不显式指定/LTCG传递时/GL或链接器,链接器最终的 MSIL 模块检测到此并重新启动该链接,通过使用/LTCG**。显式指定**/LTCG传递时/GL**和链接器为可能的最快的 MSIL 模块生成性能。

/LTCG是无效使用 /INCREMENTAL

当**/LTCG**用于链接使用编译的模块 /Og/O1选项 (如 /O2,或 /Ox,执行以下优化:

  • 跨模块内联

  • 过程间的寄存器分配(仅限 64 位操作系统)

  • 自定义调用约定(仅限 x86)

  • 小 TLS 位移(仅限 x86)

  • 堆栈双倍字长对齐方式(仅限 x86)

  • 改进的内存歧义消除(更好的全局变量和输入参数干扰信息)

说明说明

链接器将决定哪些优化每个函数使用已编译和链接时应用相同的优化。

使用**/LTCG/Ogt**将导致双对齐优化。

如果**/LTCG/Ogs**指定,则不会执行双字对齐。如果大部分应用程序中的函数为速度编译,与为大小编译的一些功能 (例如,通过使用优化杂注),编译器双对齐为大小优化它们的调用需要双字对齐的函数的函数。

如果编译器能够识别所有函数的调用站点,编译器将忽略函数的显式调用约定修饰符,尝试优化函数的调用约定:

  • 在寄存器中传递参数

  • 重新将参数排序以对齐

  • 移除未使用的参数

如果通过函数指针,则调用一个函数,或者使用编译的模块外部调用函数**/GL**,编译器不会尝试优化函数的调用约定。

说明说明

如果您使用/LTCG和重新定义 mainCRTStartup,您的应用程序可以具有与用户代码执行之前初始化全局对象的不可预知的行为。若要解决此问题的三种方法: 不要重定义 mainCRTStartup、 不编译使用包含 mainCRTStartup 的文件/LTCG,或静态初始化的全局变量和对象。

/LTCG 和 MSIL 模块

通过使用编译模块 /GL/clr 可用作链接器输入时**/LTCG**指定。

  • /LTCG可以接受混合本机/托管对象文件的本机对象文件 (编译使用**/clr**)、 纯对象文件 (编译使用**/clr:pure**),和安全的对象文件 (编译使用**/clr:safe**)

  • /LTCG 可以接受安全的 .网络模块,可以通过创建**/clr:safe /LN** Visual C++ 和**/target:module在任何其他 Visual Studio 编译器。.使用网络模块生成/clr/clr:pure不被接受/LTCG**。

  • /LTCG:PGI 不接受使用编译的本机模块**/GL/clr**,或纯模块 (使用生成**/clr:pure**)

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

  1. 打开此项目的**“属性页”**对话框。请参见 修改项目设置

  2. 选择**“配置属性”**文件夹。

  3. 选择**“常规”**属性页。

  4. 修改**“全程序优化”**属性。

您还可以应用**/LTCG对通过选择特定生成生成**, 按配置优化的菜单栏上,或通过选择项目的快捷菜单上的按配置优化选项之一。

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

请参见

参考

设置链接器选项

链接器选项