如何加快c ++链接时间

时间:2009-05-28 16:01:48

标签: c++ linker visual-c++

有没有办法在MS Visual Studio C ++(2005)中优化链接时间?我们正在使用Xoreax Incredibuild进行编译加速,但没有链接。

目前每个链接大约需要30秒。当我打开增量链接时,需要35-40秒。 (无论我是否使用incredibuild编译项目)

有什么办法,如何配置链接器并观察需要多长时间?或者任何用于paralel链接的工具?或者任何关于加速链接器的代码优化的技巧?

感谢您的回复 Ludek Vodicka


编辑:

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

  • 整个程序优化和链接时代码生成已经关闭。
  • 尽可能使用PIMPL惯用语
  • 其他静态库已经通过#pragma comment(lib,“pathToLib”)包含在内。 (也因为更容易维护]
  • HW:四核q6600,8GB ram,3x WD raptor raid 0. Windows Vista 64bit

4 个答案:

答案 0 :(得分:8)

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

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

通过Project Dependencies链接项目的开销也很高。如果您的目标平台仅限Win32,或者主要是您,可以考虑使用标头通过#pragma comment(lib,“pathToLib”)链接您的依赖库。

答案 1 :(得分:7)

如果您可以在没有优化的情况下生活,请关闭链接时代码生成(删除/ GL开关或属性c / c ++ - >优化 - >整个程序优化。对于链接器删除/ ltcg或使用链接时间码生成设置)。这会使编译器变慢,因为代码生成现在在编译期间发生。

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

答案 2 :(得分:2)

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

作为一般建议:投入一些内存,获取Velociraptor,只放置源并在那里构建目录,再次测量。如果这有帮助,请考虑RAID 0.

我听说有报告说从XP核心升级到W2K3核心可以显着改善构建时间,可能是因为更好的内存管理和缓存。

作为更改代码的建议,您可以将一些功能移动到DLL,并且并行链接。但是我不会为了改善构建时间而做出这样的改变。

答案 3 :(得分:0)

Improving link time with IncrediBuild

上有一些常规设置建议

您还可以跳过静态库的链接,不使用IncrediLink

分发静态库

我们发现添加签名后建立步骤会阻止IncrediBuild处理以下项目,为帖子构建添加评论应该有帮助

rem IncrediBuild_AllowOverlap

请参阅IncrediBuild_AllowOverlap doc