Did*_*set 49 c++ comparison gcc visual-c++ compilation-time
我在每次提交时在buildbot中编译2个C++项目.两者都是大约1000个文件,一个是100 kloc,另一个是170 kloc.编译时间与gcc(4.4)到Visual C++(2008)有很大不同.
一个项目的Visual C++编译需要20分钟.他们无法利用多核,因为项目依赖于另一个.最后,在Debug和Release中对32和64位的两个项目进行完整的编译需要超过2 1/2小时.
一个项目的gcc汇编需要4分钟.它可以在4个核心上并行化,大约需要1分10秒.2个项目的4个版本(Debug/Release,32/64位)的所有8个版本都在不到10分钟的时间内编译完成.
Visual C++编译时发生了什么?它们基本上慢了5倍.
编译C++ kloc的平均时间是多少?我的是带有vc ++的7 s/kloc和带有gcc的1.4 s/kloc.
可以做任何事情来加快Visual C++上的编译时间吗?
小智 17
如果你有一个初始化非trival const
值类型的具体实例的头文件,那么减慢VC++编译器的一件事就是.你可能会发现这种情况发生在类型std::string
或GUID的常量上.它会影响编译和链接时间.
对于单个dll,这导致了10倍的减速.如果将它们放在预编译的头文件中,或者只是在头文件中声明它们并在cpp文件中初始化它们会有所帮助.
请查看病毒扫描程序,并确保尝试使用预编译的标头,如果没有它,您将无法看到VC++的最佳状态.
哦,是的,并确保%TMP%文件夹与编写构建的位置在同一分区上,因为VC++会生成临时文件并在以后移动它们.
jdi*_*isk 11
这些项目相互依赖并不意味着不可能实现并行化.构建系统足够智能,可以找出并避免关键的依赖性,否则gcc将无法使用4个核心.
所以(除了其他步骤),为什么不尝试使用/ MP在Visual Studio中启用多处理(请参阅http://msdn.microsoft.com/en-us/library/bb385193.aspx).
你是如何构建Visual Studio项目的?你刚刚用项目运行ide(devenv),/build
或者你有一个类似于我认为你用于gcc的makefile.我假设两个版本都使用类似的makefile,但我认为值得检查.
您是否为任一编译器使用预编译头文件?如果您没有为VS使用预编译头,那么您可能希望切换到使用它们.我个人建议使用这种#pragma hdrstop
方法而不是一个包含所有内容的头文件,但是如果你当前没有使用预编译的头文件,并且想要尝试一个强制包含的单个全包头文件(使用/FI
编译器命令行开关)无需任何代码更改即可快速测试.
我写了两个/FI
,并#pragma hdrstop
在这里: http://www.lenholgate.com/blog/2004/07/fi-stlport-precompiled-headers-warning-level-4-and-pragma-hdrstop.html
这不是问题的直接答案,但在我的公司,我们使用IncrediBuild进行分布式编译.它确实加快了编译过程.http://incredibuild.com/visual_studio.htm
归档时间: |
|
查看次数: |
23261 次 |
最近记录: |