我一直在使用预编译的头文件,并被告知(并看到)它们如何减少编译时间。但我真的很想知道发生了什么(引擎盖下),这样可以让我的编译更快。
因为据我所知,在.cpp中添加未使用的include会降低编译时间,并且头文件可能包含大量未使用的头到.cpp。
那么预编译头如何让我的编译速度更快?
答案 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)
我认为“预编译”说明了如何使编译更快。你可以在这里阅读我认为的基本概念: