【问题标题】:Profiling visual c++ link time分析 Visual C++ 链接时间
【发布时间】:2014-05-21 13:29:15
【问题描述】:

我想减少我的项目的链接时间,为此我想确切地了解为什么需要这么长时间 - 它是一个特定的库吗?是别的吗?我如何知道要更改哪些内容以缩短链接时间?

更新

有许多“通用”建议,例如“减少库依赖”,但在我们的案例中它们似乎不切实际。我们的代码库很大,有很多库依赖项,通过实验找出哪个依赖项对链接时间的影响最大将花费大量时间。大部分代码库是多年前开发的,没有过多考虑依赖关系。我们正在寻找一种方法来找到一个具体的方向,例如“X 对 Y 的依赖将有利于链接时间”,而不穷尽所有可能的方向..

请注意,我们根本没有使用 LTCG。

【问题讨论】:

  • 有一些很好的建议here 和类似的先前提出的问题herehere
  • 查看更新。我更具体地写了我正在寻找的内容。
  • 您可以通过启用详细级别日志输出链接器选项来开始评估您的链接操作。 stackoverflow.com/questions/2850620/…
  • 我唯一缺少的是一种打印每个日志条目时间的方法。所以我可以了解哪些操作需要很长时间。

标签: visual-c++


【解决方案1】:

首先,我修改了需要很长时间链接的可执行文件的项目属性,并将/VERBOSE 添加到链接器命令行。这样,链接器就会生成它正在执行的操作的详细日志。

然后,我编写了一个小型 powershell 脚本来为我的构建生成的每一行添加时间戳。这样我就可以看到链接器打印的行之间经过了多少时间。假设链接器没有对它正在做什么撒谎,这给了我一个很好的提示,它可以告诉我它花费了多少时间来执行哪个操作。

这是powershell代码:

msbuild /p:Configuration=Debug /p:Platform=X64 /m MY_SOLUTION.sln *>&1 | & {
    process {
        $date = get-date -DisplayHint Time -Format hh:mm:ss.fff
        Write-Host $date -NoNewLine
        Write-Host $_
    }
}

【讨论】:

    【解决方案2】:

    对于 Visual C++,我认为链接时间优化的第一步是关闭“Whole-Program Optimization (/GL)”选项。

    我想推荐一本关于这个主题的书:Large-Scale C++ Software Design, by John Lakos。这本书在大规模 C++ 开发方面提供了很多优点,但我认为主题是“如何设计包关系以最小化链接时间”。

    它是关于模块(lib,dll)依赖最小化技术的。因为,链接一个由许多小模块组成的项目往往比一个大(许多文件)项目运行得更快。

    另外,请查看这篇博文:The “Large-Scale C++ Software Design” rules in practice

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多