【问题标题】:How does precompiled header reduce compile time预编译头文件如何减少编译时间
【发布时间】:2011-11-28 04:31:35
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-12-07
          • 2023-04-01
          • 2012-06-13
          • 1970-01-01
          • 1970-01-01
          • 2010-11-20
          • 1970-01-01
          • 2022-08-17
          相关资源
          最近更新 更多