代码之家  ›  专栏  ›  技术社区  ›  Ludek Vodicka

如何加快C++链接时间

  •  13
  • Ludek Vodicka  · 技术社区  · 15 年前

    有什么方法可以优化MS VisualStudioC++(2005)中的链接时间吗?我们正在使用Xoreax incredibuild来加快编译速度,但对于link则没有。

    目前每个链接大约需要30秒。当我打开增量链接时,需要大约35-40秒。(无论我是否编译带有不可信构建的项目)

    有没有什么方法,如何分析链接器和观察需要多长时间?或者有什么平行链接的工具?或者有什么关于代码优化以加速链接器的提示?

    谢谢你的回复 卢德克沃迪卡


    编辑:

    感谢您的首次回复和其他信息:

    • 整个程序优化和链接时间代码生成已经关闭。
    • 如果可能的话,已经使用了pimpl习惯用法
    • 其他静态库已经通过pragma comment(lib,“pathtolib”)包含在内。(也因为维护更容易)
    • 硬件:四核Q6600,8GB RAM,3X WD Raptor RAID 0。Windows Vista 64位
    4 回复  |  直到 12 年前
        1
  •  8
  •   Brett Douville    15 年前

    我不知道任何并行链接工具;我知道incredibuild不允许这样做。

    工具箱中避免链接时间的最大工具是适当的抽象级别。如果链接时间很长,可能是因为对象对其他对象了解得太多。然后,分离它们是关键——通过抽象接口(可能使用PIMPL范式),或者通过事件传递等其他方法。

    通过项目依赖关系链接项目的开销也相当高。如果您的目标平台只是win32,或者主要是win32,那么您可以考虑使用一个头部通过pragma comment(lib,“pathtolib”)链接您的依赖库。

        2
  •  7
  •   Ben Schwehn    15 年前

    如果没有优化就可以生存,关闭链路时间代码生成(删除/GL交换机或属性C/C++ +GT;优化-GT;整个程序优化)。对于链接器remove/ltcg或使用链接时间代码生成设置)。但这会使编译器变慢,因为代码生成现在在编译期间发生。

    我见过用/gl+/ltcg构建项目需要数小时,而不用几秒钟(例如: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/750ed2b0-0d51-48a3-bd9a-e8f4b544ded8 )

        3
  •  2
  •   peterchen    15 年前

    你考虑过改进硬件吗?
    您是否使用单独的物理硬盘进行构建?你用什么样的驱动器?

    作为一个一般性的建议:投入一些记忆,得到 Velociraptor ,只放置源文件并在其中建立目录,再次测量。如果这有帮助,可以考虑使用RAID 0。

    我听说从xp内核升级到w2k3内核可以显著提高构建时间,这可能是由于更好的内存管理和缓存。

    作为更改代码的建议,您可以将一些功能移到一个dll,并并行链接。但我不会仅仅为了提高构建时间而进行这样的更改。

        4
  •  0
  •   Michał Powaga Mohamed Aslam    12 年前

    有一些一般的设置建议 Improving link time with IncrediBuild

    您还可以跳过静态lib的链接,这样就不会使用 IncrediLink

    我们发现,添加一个签名的后期生成步骤将阻止incredibuild处理以下项目,向后期生成添加注释应该会有所帮助。

    rem IncrediBuild_AllowOverlap
    

    IncrediBuild_AllowOverlap doc