在.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++?
我在一本书中读到,在.cpp
文件中定义(类的(方法,而不是在声明(.h
文件(中的类中定义它,将减少内存使用并加快编译时间。
将成员函数定义从类定义移动到单独的.cpp文件通常会加快编译时间并减少内存使用
我尝试在C++代码中实现它,但执行时间每次都不同,所以我无法清楚地检查它。谁能帮我理解这个概念?
函数定义的位置对代码性能没有影响,只要将其编译为单个二进制文件即可。请注意,即使函数未在头文件中定义,也可以内联,即使它们在头文件中定义,也可能不内联。
根据项目组织的不同,将定义放入头文件而不是.cpp文件中可能会大大缩短构建时间或使其变得更糟。对于最快的构建,必须将定义放入头文件中。
正如您所说,在.cpp
而不是.h
中定义方法可以提高性能和加快编译时间。
请注意,这两个属性(性能和加速(都应用于编译时间。它不会提高运行时的性能。
关于为什么它可以提高编译时间的性能,这是因为该方法仅在定义它的.cpp
中解析和编译,而如果在.h
中定义,则会在包含标头的所有.cpp
中解析和编译,从而降低总编译速度 [1]
[1] 在这篇博文中,它得到了进一步和更详细的解释: http://gameangst.com/?p=224
当您将方法定义放入.cpp文件中时,它会编译一次,并且此方法在其他.cpp文件中的每次调用都将链接到该方法的这个单一编译版本。
如果将方法定义放入头文件中,就好像将其复制粘贴到包含标头的每个.cpp文件中,并且必须在每个.cpp文件编译中单独编译,这当然比编译一次花费更多时间。
如果函数在类中内联定义,则允许编译器将其内联而不是调用它(基本上将代码复制到调用的位置(。这可以提高运行时性能。
而且,内联函数将导致每个翻译单元的编译,其中包含类的头文件重新编译该确切的函数定义,这可能会使构建过程更长。
...将提高性能和加速编译时间
这本书的第一部分是错误的。它不会提高程序在外部定义函数的(运行时(性能。事实上,如果不是为了链接时间优化,由于可能会阻止内联扩展,它会产生相反的效果。
后一种说法并不那么可疑,尽管事实并非如此简单。拥有多个翻译单元通常会减慢项目的从头开始编译时间。但是,当这些翻译单元较小时,能够仅编译已更改的翻译单元可以显著减少增量更改的编译时间。
- 在父类中为多个子类定义方法
- 在.cpp文件中定义方法而不是在 C++ 的 .h 文件中定义方法时,如何提高代码的性能?
- 对已定义方法的未定义引用
- 需要派生的类来定义方法
- 在某些名称空间中定义方法时,在全局名称空间中声明
- 在类 C++ 中重定义方法
- 这两种定义方法的样式之间是否存在差异
- 对已定义方法的未定义引用、标头中的声明和源匹配
- 如果未在类 c++ 中定义方法,如何在类对象上使用方法
- 在为嵌入式类定义方法时,有没有办法避免重复包含类
- 有关C++中一个或多个乘法定义方法的错误
- 在 cpp 文件中定义方法时未解析外部,但在标头中定义时未解析
- 是否允许所有未使用的未定义方法
- 如何在声明之外为专门用于无参数的可变模板类定义C++方法
- 什么是编程语言为派生类重新定义方法的能力
- 在C++中,在类定义内部或外部定义方法体是否更为传统
- 向std::vector或typdef添加自定义方法
- 如果在头文件中定义方法,内联关键字有什么用?
- C++ 我知道数组长度,但想知道是否是一种更简洁的数组元素定义方法
- 在类作用域内定义方法时,除非在原始 cpp 文件中的其他位置调用方法,否则项目不会编译