不必要的包含文件是否会产生开销?

2024-05-09

我看到了几个关于如何检测 C++ 项目中不必要的 #include 文件的问题。这个问题经常引起我的兴趣,但我一直没有找到满意的答案。

如果包含一些未在 C++ 项目中使用的头文件,这是一种开销吗?我理解这意味着在编译之前,所有头文件的内容将被复制到包含的源文件中,这将导致大量不必要的编译。

这种开销对编译后的目标文件和二进制文件的影响有多大?

编译器不能做一些优化来确保这一点 某种开销不会转移到生成的目标文件中,并且 二进制文件?

考虑到我可能对编译器优化一无所知,我仍然想问这个问题,以防有答案。

作为一名在工作中使用各种 C++ 库的程序员, 我应该遵循什么样的编程实践来避免 这么大的开销?让自己对每一个都更加熟悉 图书馆是唯一的出路吗?


对于几乎所有标头,它不会影响二进制文件的性能,甚至不会影响二进制文件的内容。声明根本不生成任何代码,内联/静态/匿名命名空间定义如果不使用就会被优化掉,并且任何标头都不应包含外部可见的定义(如果标头被多个翻译单元包含,则会中断)。

正如@T.C.指出,例外是具有重要构造函数的内部可见静态对象。iostream例如,这样做。程序的行为必须就像调用构造函数一样,并且编译器通常没有足够的信息来优化构造函数。

但是,它确实会影响编译所需的时间以及更改标头时将重新编译的文件数量。对于大型项目,这足以激励人们关心不必要的包含。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不必要的包含文件是否会产生开销? 的相关文章

随机推荐