• [转]link time code generation


    http://blog.csdn.net/ccanan/article/details/6030323

    http://msdn.microsoft.com/en-us/magazine/cc301698.aspx

    在link时刻做的代码优化。

    平时接触的编译器优化基本是compile time优化,比如inline这样的工作。

    其限制就是可以做的东西就是在一个编译单元里,一旦调用的一个函数在另外一个编译单元,就只有跳转着一个选择,至于跳转的细节就是在link time来决定了。

    link time 优化就是在拿到所有编译单元结果了之后,在全局做的一个优化,这时候可以理解成整个编译域变成一个编译单元,很多compile时刻的优化可以linktime做了。

    比如inline,调用函数的时候,不用所有的东西都push到stack里,也可以直接放到register里直接调用。

    或者更好的thread local storage的reference。

    我在查看asm的时候还发现过把一样的函数合并,比如void func0();void func1();编译出来是一个东西,但是不在一个编译单元里,link time code generation会把向两个函数跳转的语句变成像一个地方跳转。

    不好的地方就是编译时间变慢很多,所以shipping的时候带着ltcg(link time code generation)是不错的选择,平时开发的时候就算了吧。

    =============================================================================

    http://blog.csdn.net/chengzi/article/details/256582

    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

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/pulas/p/2454062.html
Copyright © 2020-2023  润新知