在C / C ++中包含未使用的头文件是否会受到性能影响?

我有一个项目,每个C / C ++文件使用一堆头文件。 但是每个C / C ++文件使用的头文件大约有70-80%是相同的。 因此,为了使我的代码更具可读性,我计划将项目中需要的所有头文件包含在单个头文件中,例如common_headers.h并将其包含在我的所有C / C ++文件中,如下所示:

 #include "common_headers.h" 

现在,这将包括所有必需的标题,但也包含一些单独文件不会使用的额外标题。 我想知道如果这样做,它会在运行时以任何机会达到性能吗?

我可以用几毫秒的额外延迟来编译代码,但我想知道这是否会影响我的运行时性能?

使用的标题说明:

  1. 其中大多数是标准的C / C ++标头。
  2. 用户定义的标题中包含内联模板函数。
  3. 用户定义的标头中没有静态函数。

这是我的编译器: g ++(GCC)4.4.7 20120313(Red Hat 4.4.7-3)

汇编:

如果包含某些内容,那么即使它实际上永远不会被编译和链接也必须进行分析,因此编译时间肯定会增加 – 不要包含未使用的标头

运行:

@DonReba已经提到过,未使用的头文件可能包含一些可以更改生成的可执行文件的pragma伪指令,但通常情况并非如此。

大多数未使用的函数和声明都将被优化,不包括某些特定情况 – 未使用的函数是否已经过优化? 。 生成的exe可能会变得更大,但不会使用这些函数和变量,因此总体影响将会很小。 – – 但是,不要包含未使用的标头

摘要:

如果您可以修改源代码以不包含任何不需要的内容 – 修改它。

Personnaly我更喜欢拥有自包含的模块(标题),包括他们需要的一切 – 仅此而已。 可以在没有后见之明的情况下添加和删除这些模块,并且可能存在一些不需要的依赖性。 他们仍然不是灵丹妙药,但加上注意力和一些代码分析,他们将使您的程序免受无谓的标题。

编辑:

预编译头文件:

预编译头用于减少常用但很少更改的头(系统头,大型项目头)的编译时间,因此如果预编译头中包含那些未使用的头,则后续编译期间的编译时间效应将最小化。 尽管如此,所有运行时问题,无论它们有多小,都与简单的标题包括一样。

对问题的简短回答: 不。

答案很长:

更多标题意味着某些问题出现的可能性稍微大一些可能表现为性能问题,但它确实不是一个问题。

许多人认为你的计划风格很差,但也有人认为它是可以接受的。

避免这种风格的一个关键原因是它将使得更容易获得循环依赖。

由于编译时问题,我没有预先编译的头文件,我会劝阻它。

取决于编译器。 今天的大多数编译器都是智能的,并使用预编译头来提高性能。 我使用支持预编译头的GCC编译器,AFAIK不影响性能。

由于覆盖了预处理程序指令,包含额外的标头可能会产生不同的运行时代码。 但这不是正常情况。

Visual C ++,GCC和Clang支持预编译头文件,以改善像您这样的用例的编译时间。