在.cpp文件中定义方法而不是在 C++ 的 .h 文件中定义方法时,如何提高代码的性能?

how the performance of the code gets increased while defining the method in .cpp file rather than defining it in the .h file in c++?

本文关键字:定义 方法 文件 代码 性能 何提高 C++ cpp      更新时间:2023-10-16

我在一本书中读到,在.cpp文件中定义(类的(方法,而不是在声明(.h文件(中的类中定义它,将减少内存使用并加快编译时间。

将成员函数定义从类定义移动到单独的.cpp文件通常会加快编译时间并减少内存使用

我尝试在C++代码中实现它,但执行时间每次都不同,所以我无法清楚地检查它。谁能帮我理解这个概念?

函数定义的位置对代码性能没有影响,只要将其编译为单个二进制文件即可。请注意,即使函数未在头文件中定义,也可以内联,即使它们在头文件中定义,也可能不内联。

根据项目组织的不同,将定义放入头文件而不是.cpp文件中可能会大大缩短构建时间或使其变得更糟。对于最快的构建,必须将定义放入头文件中。

正如您所说,在.cpp而不是.h中定义方法可以提高性能和加快编译时间

请注意,这两个属性(性能和加速(都应用于编译时间。它不会提高运行时的性能。

关于为什么它可以提高编译时间的性能,这是因为该方法仅在定义它的.cpp中解析和编译,而如果在.h中定义,则会在包含标头的所有.cpp中解析和编译,从而降低总编译速度 [1]


[1] 在这篇博文中,它得到了进一步和更详细的解释: http://gameangst.com/?p=224

当您将方法定义放入.cpp文件中时,它会编译一次,并且此方法在其他.cpp文件中的每次调用都将链接到该方法的这个单一编译版本。

如果将方法定义放入头文件中,就好像将其复制粘贴到包含标头的每个.cpp文件中,并且必须在每个.cpp文件编译中单独编译,这当然比编译一次花费更多时间。

如果函数在类中内定义,则允许编译器将其内联而不是调用它(基本上将代码复制到调用的位置(。这可以提高运行时性能。

而且,内联函数将导致每个翻译单元的编译,其中包含类的头文件重新编译该确切的函数定义,这可能会使构建过程更长。

...将提高性能和加速编译时间

这本书的第一部分是错误的。它不会提高程序在外部定义函数的(运行时(性能。事实上,如果不是为了链接时间优化,由于可能会阻止内联扩展,它会产生相反的效果。

后一种说法并不那么可疑,尽管事实并非如此简单。拥有多个翻译单元通常会减慢项目的从头开始编译时间。但是,当这些翻译单元较小时,能够仅编译已更改的翻译单元可以显著减少增量更改的编译时间。