VC.NET 的链接时代码生成 LTCG - Link-time Code Generation

MSDN 原文: Link-time Code Generation

The Key:
C++ 程序正常的代码生成包括三个步骤:
1. 前端,C1, 读取源代码,产生符号表,分析源代码,检查语法正确性,产生某种中间代码(IL)。调用后端。
2. 后端,C2, 代码生成器,读取IL,产生针对CPU的具体代码,代码优化,产生包括实际代码和数据的obj文件。
3. 链接,Linker,读取所有的obj文件和lib文件,建所有的代码和数据合成到最终的.exe可执行文件中。

LTCG - Link-time Code Generation 链接时代码生成
1. 前端C1直接产生 IL 的 obj 文件。不调用C2。
2. Linker读取所有的 IL obj 文件和 lib 文件,调用C2,将所有的 IL 代码塞给C2以产生最终的实际代码。
好处:因为C2可以得到所有的代码,它可以进行更好的代码优化,更好的 inline (跨模块,跨源文件的 inline),和 TLS优化。

怎样打开LTCG
1. 在 VC.NET IDE 中,将Whole Program Optimization 设置为 Yes。
2. 命令行参数,编译器使用 /GL, 链接时使用参数 /LTCG

你可能感兴趣的:(随手笔记)