头文件包含和性能注意事项c ++

时间:2013-08-23 16:03:50

标签: c++ c include

假设所有标头都包含适当的防护设置,是否有任何方法可以通过简单地改变这些标头来提高应用程序的运行时性能?

在一个文件中包含所有必需标头的应用程序与不具有所有标头的应用程序之间是否存在性能差异?

4 个答案:

答案 0 :(得分:2)

运行时效率

包含或未包含的标头集实际上对运行时生成的应用程序的效率没有影响。您应该包含声明您使用的函数的标头。例如,如果这些头提供了内联函数定义,那么通过与不提供内联函数声明的(假设的替代)头相比,您可以获得一些性能提升,但是仍然需要包含头以便由人控制提供标题。

编译时效率

我首先假设这是你所追求的,部分是因为提到标题包括与纯编译相关的问题。

如果标题设置为包含保护,您仍然可以按照以下规则提高编译效率(对产品没有影响):

  • 不要在源代码级别包含两次相同的标题。

    #include <stdio.h>
    
    ...40 other project specific includes...
    
    #include <stdio.h>
    

    (是的,我已经在实际代码中看到了它;我经常修复它。而且,正如评论中所指出的,这不是一个非常糟糕的性能问题,但它在代码中是混乱的。)

  • 请勿包含不需要的标头。

答案 1 :(得分:0)

所以你问在代码中有一个大标题和5个小标题有什么区别?当编译标题的主体添加到“include”行的位置时,#include只修改源代码并且在运行时不会使应用程序变慢。这不会影响性能,但是在制作大型项目时,您需要多个标题,而不是制作大标题,原因与不在一个源代码中编写整个应用程序相同。

答案 2 :(得分:0)

如果您引用包含#include的静态标头,那么在运行时没有区别。编译器会将这些标题中的所有“信息”组合成一个程序。

答案 3 :(得分:0)

如果你最终改变了包含标题的顺序,并且你的标题正在做标题不应该做的事情(即定义对象而不仅仅是类型和函数),那么你可以改变内存局部性并影响运行时性能

或者,如果您有内联定义函数的冗余声明(这也不是一个好主意),并且您重新排序标题以使定义对更多或更少的调用站点可见,那么运行时性能可能改变(尽管大多数优化器应该能够向上内联)。

请注意,如果您的代码受到这些更改的影响,则可能容易受到实际破坏的影响,例如重新排序更改在使用时可见的模板特化集。