预编译头如何减少编译时间

时间:2011-11-28 04:31:35

标签: c++ compiler-construction compilation precompiled-headers

我一直在使用预编译的头文件,并被告知(并看到)它们如何减少编译时间。但我真的很想知道发生了什么(引擎盖下),这样可以让我的编译更快。

因为据我所知,在.cpp中添加未使用的include会降低编译时间,并且头文件可能包含大量未使用的头到.cpp。

那么预编译头如何让我的编译速度更快?

4 个答案:

答案 0 :(得分:4)

来自http://gamesfromwithin.com/the-care-and-feeding-of-pre-compiled-headers谢谢(@Pablo)

  

C ++编译器在一个编译单元(cpp文件)上运行   时间。对于每个文件,它应用预处理器(注意事项)   做所有包括并将它们“烘焙”到cpp文件本身),   然后它编译模块本身。转到下一个cpp文件,   冲洗并重复。显然,如果几个文件包含相同的一组   昂贵的头文件(大和/或包括许多其他头文件   反过来),编译器将做很多重复工作。

     

考虑预编译头的最简单方法是作为缓存   头文件。编译器可以分析一组头文件,编译   它们,然后为任何需要它们的模块准备好结果。

答案 1 :(得分:2)

基本上,为每个包含它的翻译单元(.cpp文件)编译一次头文件。使用预编译的标头可以节省用于反复编译包含文件的时间。当要预编译的头文件非常大(或间接包含许多其他头文件)时,这非常有用。

答案 2 :(得分:1)

很多年前,我有权访问一个C编译器,它打印出它处理的行数(Watcom C版本6左右)。编译少于100行C代码的文件将显示5,000或甚至10,000行的计数。所有这些都是#included。换句话说,#included代码完全支配编译时间。所以你可以采取的任何措施来减少这种情况将是有益的。您可以使用允许禁用预处理的编译器自己查看:比较使用和不使用它的完整系统构建的时间。

答案 3 :(得分:0)

我认为“预编译”说明了如何使编译更快。你可以在这里阅读我认为的基本概念:

http://en.wikipedia.org/wiki/Precompiled_header