gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:18:34 24 4
gpt4 key购买 nike

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

#include "common_headers.h"

现在这将包括所有必要的 header ,但也包括一些不会被单个文件使用的额外 header 。我想知道如果这样做,它是否会在运行时影响性能?

我对编译代码的额外延迟几毫秒没问题,但我想知道这是否会影响我的运行时性能?

使用的 header 说明:

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

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

最佳答案

编译:

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

运行时间:

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

大多数未使用的函数和声明将被优化,不包括一些特定情况 - Do unused functions get optimized out? .生成的 exe 可能会变大一点,但不会使用那些函数和变量,因此总体影响将很小。 - - 尽管如此,不要包含未使用的 header

总结:

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

我个人更喜欢拥有独立的模块(标题),其中包括他们需要的一切 - 仅此而已。可以添加和删除此类模块,而无需事后诸葛亮,也不会留下一些不需要的依赖项。它们仍然不是 Elixir ,但加上细心和一些代码分析,它们将使您的程序摆脱无用的 header 。

编辑:

预编译 header :

预编译头用于减少经常使用,但很少更改的头文件(系统头文件,巨大的项目头文件)的编译时间,因此如果将那些未使用的头文件包含在预编译头文件中,则后续编译时的编译时间效果将是最小化。尽管如此,所有运行时问题,无论它们有多小,都与简单的 header 包含相同。

关于c++ - 在 C/C++ 中包含未使用的头文件是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25008801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com