我在一个buildbot中编译2个C++项目,每次提交。这两个文件都在1000左右,一个是100Kloc,另一个是170Kloc。编译时间从gcc (4.4)到Visual C++ (2008)有很大的不同。
一个项目的Visual C++编译在20分钟内完成。他们不能利用多个核心,因为一个项目依赖于另一个项目。最后,在Debug和Release中完整编译32位和64位的两个项目需要超过两个半小时。
gcc在4分钟内为一个项目进行了编译。它可以在4个内核上并行化,大约需要1分10秒。两个项目的4个版本(Debug/Release,32/64位)的所有8个版本在不到10分钟内编译完成。
可视化C++编译时间是怎么回事?它们基本上要慢5倍。
编译一个C++ kloc的平均时间是多少?我的vc++是7s/kloc,gcc是1.4s/kloc。
能做些什么来加快在Visual C++上的编译速度吗?
发布于 2010-02-17 03:24:00
如果您有一个头文件来初始化非平凡const值类型的具体实例,这会降低VC++编译器的速度。您可能会在std::string或GUID类型的常量中看到这种情况。它同时影响编译和链接时间。
对于单个dll,这会导致10倍的速度减慢。如果您将它们放在预编译头文件中,或者只需在头文件中声明它们并在cpp文件中初始化它们,这将有所帮助。
一定要看一看病毒扫描程序,并确保试验预编译头文件,如果没有它,你将无法看到VC++的最佳状态。
哦,对了,还要确保%TMP%文件夹与您的构建被写入的分区在同一个分区上,因为VC++会生成临时文件并在以后移动它们。
发布于 2010-02-12 19:38:30
相互依赖的项目并不意味着没有并行化是可能的。构建系统足够智能,可以找出并避免严重的依赖,否则gcc将无法使用4个内核。
那么(除了其他步骤之外),为什么不尝试使用/MP (参见http://msdn.microsoft.com/en-us/library/bb385193.aspx)在Visual Studio中启用多处理呢?
发布于 2010-02-12 20:08:17
您是如何构建Visual Studio项目的?你只是在项目和/build中运行ide (devenv),还是你有一个类似于我假设你正在为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
https://stackoverflow.com/questions/2251212
复制相似问题