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

6

我已经使用预编译头文件一段时间了,并被告知(也看到)它们可以减少编译时间。但我真的很想知道底层发生了什么,以便让我的编译更快。

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

那么预编译头文件如何使我的编译更快呢?


1
请参阅此处:http://gamesfromwithin.com/the-care-and-feeding-of-pre-compiled-headers - Pablo
4个回答

4

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

C++编译器一次只能处理一个编译单元(cpp文件)。对于每个文件,它都会应用预处理器(负责处理所有包含的内容,并将其“烘焙”到cpp文件中),然后编译模块本身。继续处理下一个cpp文件,反复执行。显然,如果多个文件包含相同的一组昂贵的头文件(大型和/或包含许多其他头文件),则编译器将完成许多重复的工作。

最简单的理解预编译头文件的方法是将其视为头文件的缓存。编译器可以分析一组头文件,编译它们,然后将结果准备好供需要它们的任何模块使用。


2
基本上,每个包含头文件的翻译单元(.cpp文件)都会编译一次头文件。使用预编译头文件可以节省重复编译包含文件所需的时间。当需要预编译的头文件非常大(或间接包含许多其他头文件)时,这真的很有益处。

1
很多年前,我有一个打印出处理行数的C编译器(Watcom C版本6左右)。编译少于100行C代码的文件将显示5000甚至10000行的计数。所有这些都是#include的。换句话说,#include的代码完全支配了编译时间。因此,任何你可以做的减少它的方法都会有益处。你可以用允许你禁用预处理的编译器自己看看:比较完整系统构建的时间,有和没有预处理的。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接