目的:完全处于性能的考虑
机制:将被调用函数的函数代码直接地整个插入到函数被调用处
两种表现:
1. 关于类的成员函数
类外使用时,需要指定关键字inline
类内使用时,声明的同时提供函数体,inline不是必须的
2. 关于普通函数
需要加inline
原则:ODR原则,最好将内联函数都定义在一个头文件
优点:
1. 减少因为函数调用,主要是参数压栈,栈帧开辟与回收,以及寄存器的保存与恢复
2. 编译后, 代码集中,优化更彻底,(对最终代码优化可能更有贡献)
分析:
空间上:非内链函数代码只有一份,使用call指令调用
内联函数每个被调用出都有一份代码拷贝。
如果内联函数自己的函数代码量比自己函数调用的准备与善后引入的代码量小,则内联后代码量将变小
时间上:内联函数调用的代码是相邻的,同一页面或者连续页面,降低缺页率
建议:内联函数最好在开发后期引入,避免大量编译时间
修改/维护:修改内联函数需要重新编译真个工程
特点:inline只是对编译器的一种建议
内联虚函数:由于虚函数是晚绑定的,编译期不知道函数属于哪个版本
可以内联的情况: 1.通过对象
2.指针/引用 编译器确定虚函数具体版本
==================================================
宏: 内联函数:
1.由预处理器处理 1.编译器处理
2.对++/--操作有副作用 2.可能会被编译器拒绝(不一定内联)
3.难于调试 3.可能造成代码膨胀
4.必定被展开
==================================================