注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

提高C/C++程序的编译速度  

2013-05-29 17:26:08|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++ 程序编译之所以慢,应该和他的include头文件依赖相关。

一个cpp文件,include了一个头文件,头文件又include很多头文件。

编译的时候,就需要磁盘不停的打开和加载不同的头文件。

但很多cpp文件,包含了很多头文件的时候,即使每个cpp包含的头文件都是一样的,

而且,同一个cpp文件里面,有可能由于头文件循环include等依赖关系不是很清楚,导致一个头文件被单一一个cpp文件include 几十次之多。

那么磁盘上就同时打开关闭多次这个文件,编译起来就慢了。


如果你不能理解这个问题,可以看看这篇文章里面关于“C和C++中的依赖”的介绍

Go在谷歌:以软件工程为目的的语言设计

http://www.oschina.net/translate/go-at-google-language-design-in-the-service-of-software-engineering

英文

Go at Google: Language Design in the Service of Software Engineering

http://talks.golang.org/2012/splash.article

go语言通过新的import机制解决了这个问题。编译的时候再也没有这种需要重复编译头文件的问题了。

看了这篇文章,就觉得有必要去学习一下go语言了,



这样衍生出来的提高c++编译速度技术有:


1. 合理的include,通过一些技巧编码在头文件再中include其他头文件,避免循环include等。这样应该就是优化依赖关系,避免cpp引用同一个头文件几十次的问题。

    《大规模C++程序设计》 Large-Scale C++ Software Design 这个书,提供了很多技巧。 大的c++项目需要注意吧。现在有一个c++项目每次编译都要20分钟以上痛苦死了。

   以前读书时看过这本书,看来是不是要复习一下了。



2. 预编译头文件技术

   VC 和gcc 里面都支持预编译头文件。 大概就是通过预先编译好的头文件,比啊摹重复的加载和编译同一个头文件了。

   如果去他cpp也是引用同一个头文件,或者引用多次时,就不需要重复的做那些从磁盘加载编译的步骤了。

   统一的从编译好的pch或者gch文件里面直接加载就好了。如果项目里面一些公用的头文件被很多cpp引用,这个应该可以缩短很多的编译时间的。

   

   MSDN的文章Creating Precompiled Header Files

   http://msdn.microsoft.com/en-us/library/szfdksca(v=vs.71).aspx


3. 好的磁盘读写性能,多线程并行编译  ,多机器并行编译。

   听说很多编译时间都是耗在加载文件的磁盘读写上面了?想想同一个头文件被重复加载多次吧! 这个应该很容易避免的吧? 需要大内存),




网上有人写了个总结,好像比较完整一些。

如何加快C++代码的编译速度

http://blog.csdn.net/hoya5121/article/details/5497896   

  评论这张
 
阅读(982)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017