假设所有标头都包含适当设置的保护,是否有任何方法可以通过简单地更改这些标头来提高应用程序的运行时性能?
在一个文件中包含所有需要的标头的应用程序和没有的应用程序之间在性能方面有什么区别吗?
包含或不包含的标头集实际上对生成的应用程序在运行时的效率没有影响。您应该包含声明您使用的函数的标题。例如,如果这些标头提供内联函数定义,那么与不提供内联函数声明的(假设的替代)标头相比,您可能会获得一些性能提升,但您仍然需要包含标头以便由人们控制提供标题。
我首先假设这就是您所追求的,部分原因是提到了标头包含守卫,这是一个纯粹与编译相关的问题。
如果标头设置了包含保护,您仍然可以通过遵循以下规则来提高编译效率(对产品没有影响):
不要在源代码级别包含两次相同的标头。
#include <stdio.h>
...40 other project specific includes...
#include <stdio.h>
(是的,我在真实代码中见过它;我经常修复它。而且,正如评论中所指出的,这不是一个非常糟糕的性能问题,但它在代码中很混乱。)
不要包含不需要的标题。
所以你在问代码中有一个大标题和五个小标题有什么区别?编译时在“include”行的位置添加了header的主体,因此#include只是修改了源代码,不会使应用程序在运行时变慢。这不会影响性能,但是在制作大型项目时,您将需要多个头文件,而不是制作大头文件,原因与不在一个源代码中编写整个应用程序的原因相同。
如果您引用包含在 中的静态标头#include
,则在运行时没有区别。编译器会将这些头文件中的所有“信息”组合到一个程序中。
如果您最终更改了包含标头的顺序,并且您的标头正在做标头不应该做的事情(即定义对象而不仅仅是类型和函数),那么您可能会更改内存位置并影响运行时性能。
或者,如果您有多余的内联定义函数声明(这也不是一个好主意),并且您重新排序标题以便定义对更多或更少的调用站点可见,那么运行时性能可能会发生变化(尽管大多数优化器应该能够向上内联)。
请注意,如果您的代码受到这些更改的影响,它可能容易受到实际破坏,例如重新排序更改在使用点可见的模板特化集。