首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何改善可视化C++的编译时间?

如何改善可视化C++的编译时间?
EN

Stack Overflow用户
提问于 2010-02-12 18:51:18
回答 12查看 24K关注 0票数 50

我在一个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++上的编译速度吗?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-02-17 03:24:00

如果您有一个头文件来初始化非平凡const值类型的具体实例,这会降低VC++编译器的速度。您可能会在std::string或GUID类型的常量中看到这种情况。它同时影响编译和链接时间。

对于单个dll,这会导致10倍的速度减慢。如果您将它们放在预编译头文件中,或者只需在头文件中声明它们并在cpp文件中初始化它们,这将有所帮助。

一定要看一看病毒扫描程序,并确保试验预编译头文件,如果没有它,你将无法看到VC++的最佳状态。

哦,对了,还要确保%TMP%文件夹与您的构建被写入的分区在同一个分区上,因为VC++会生成临时文件并在以后移动它们。

票数 17
EN

Stack Overflow用户

发布于 2010-02-12 19:38:30

相互依赖的项目并不意味着没有并行化是可能的。构建系统足够智能,可以找出并避免严重的依赖,否则gcc将无法使用4个内核。

那么(除了其他步骤之外),为什么不尝试使用/MP (参见http://msdn.microsoft.com/en-us/library/bb385193.aspx)在Visual Studio中启用多处理呢?

票数 10
EN

Stack Overflow用户

发布于 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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2251212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档