宏、普通函数、内联函数之间的区别

2020-02-29  本文已影响0人  zlrs

普通函数

内联函数

比普通函数调用性能高,体现在

  1. 没有函数调用的开销,主要是参数压栈、栈帧开辟与回收,以及寄存器保存与恢复
  2. 编译器能掌握更多代码的信息,有助于编译器更深入地优化代码。编译器在处理调用内联函数的函数时,因为可供分析的代码更多,因此它能做的优化更深入彻底。前一条优点对于开发人员来说往往更显而易见一些,但往往这条优点对最终代码的优化可能贡献更大。

注意点

  1. 由编译器完成展开。
  2. 由于CPP是按编译单元编译的。一个编译单元被编译时不知道其它编译单元的存在。所以假设此编译单元中需要展开某个内联函数,那么这个内联函数必须在此编译单元内可见。又根据“唯一定义原则”,内联函数的最佳实践是将内联函数的定义放入头文件中;所有需要用到这个内联函数的编译单元都include该头文件。(显然根据缺点2,若该头文件中内联函数的实现变了,那么所有include该头文件且调用了该内联函数的编译单元都得重新编译)

内联函数的缺点

上一篇 下一篇

猜你喜欢

热点阅读