/OPT(优化)
控制 LINK 在生成期间执行的优化。
/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
实参
REF | NOREF
/OPT:REF 清除从未引用的函数和/或数据,而 /OPT:NOREF 保留从未引用的函数和/或数据。默认情况下,LINK 移除未引用的封装函数。 如果对象已经用 /Gy 选项编译过,它包含封装函数 (COMDAT)。 此优化称为可传递的 COMDAT 消除。 若要重写该默认值并在程序中保留未引用的 COMDAT,请指定 /OPT:NOREF。 可以使用 /INCLUDE 选项重写特定符号的移除。
如果指定了 /DEBUG,/OPT 的默认项是 NOREF(否则,为 REF),而且所有函数都保留在映像中。 若要重写此默认项并优化调试生成,请指定 /OPT:REF。 /OPT:REF 选项禁用增量链接。
必须显式地将数据标记为 COMDAT;使用 __declspec(selectany)。
如果指定了 /OPT:REF,默认情况下 /OPT:ICF 处于打开状态。 如果需要 /OPT:REF 而不是 /OPT:ICF,则必须指定下面的内容:
link /opt:ref /opt:noicf
指定 /OPT:ICF 不激活 /OPT:REF 选项。
ICF[= iterations**] | NOICF**
使用 /OPT:ICF[=iterations] 执行相同的 COMDAT 折叠。 可以从链接器输出中删除冗余 COMDAT。 iteration 指定遍历符号以查找重复项的次数。 默认迭代次数是两次。 附加的迭代可以找到前一次迭代中通过折叠未发现的重复项。请注意,默认情况下 ICF 有效时(显式指定 /OPT:REF),与显式指定 /OPT:REF,ICF 时,链接器行为是有区别的。 默认的带 /OPT:REF 的 ICF 不折叠只读数据。 这包括任何 .rdata、.pdata 和 .xdata。 但是,默认的带 /OPT:REF 的 ICF 导致在为 Itanium 和 x64 生成映像时折叠较少的函数,因为这些模块中的函数具有更多的只读数据依赖项,例如 .pdata 和 .xdata。 若要获得完整的 ICF,请显式指定 /OPT:ICF。
函数通过 /Gy 编译器选项放在 COMDAT 中,常数数据放在 COMDAT 中。 有关如何为折叠指定数据的示例,请参见 selectany。
如果 REF 处于打开状态并且需要在调试生成中显式打开,则默认情况下 ICF 处于打开状态。 如果指定了 REF,则可以指定 NOICF。
提示
/OPT:ICF 可导致相同的地址分配到不同的函数或只读数据成员(用 /Gy 编译的常数变量)。 因此,/OPT:ICF 可中断依赖于不同的函数或只读数据成员的地址的程序。 有关更多信息,请参见 /Gy(启用函数级链接)。
备注
优化通常是以增加链接时间为代价,减小图像大小并加快程序速度。
可使用 /VERBOSE 选项查看由 /OPT:REF 移除的函数和由 /OPT:ICF 折叠的函数。
在 Visual Studio 开发环境中设置此链接器选项
打开该项目的**“属性页”**对话框。 有关详细信息,请参见设置 Visual C++ 项目属性。
单击**“链接器”**文件夹。
单击**“优化”**属性页。
修改下列任一属性:
启用 COMDAT 折叠
Windows 98 优化
引用
以编程方式设置此链接器选项
- 请参见 EnableCOMDATFolding 和 OptimizeReferences 属性。