内联函数(inline)
调用普通函数,每个普通函数语句都需要发生跳转操作。这种跳转操作会带来时间开销!
程序执行流程
从main入口进入,执行到函数时,会跳转对应函数,然后跳转回main函数后,每一次调用会发生两次函数跳转。
inline(内联函数关键字)
inline foo() {
}
内敛函数就是用函数已经编译好的二进制指令集,替换对该函数的调用指令。
优点
减少函数调用开销:对于频繁调用的小函数,使用 inline 可以避免函数调用的栈操作开销,从而提高性能。
缺点
-
代码重复:inline 函数的定义会被复制到每个调用处(如果编译器接受),因此可能会增加生成的目标代码大小
-
过度使用问题:滥用 inline 可能导致目标代码体积增大,反而降低缓存命中率和性能。
-
调试困难:内联函数可能使调试变得更加困难,因为函数调用堆栈可能不明显。
使用场景
-
小型、简单且频繁调用的函数。
-
不适用于大型或复杂函数,因为可能导致代码膨胀。
-
递归函数不适合内联。
注意事项
-
inline关键字仅表示期望该函数被优化为内联函数,但是否适合内联规则则完全由编译器决定。
-
过度使用问题:滥用 inline 可能导致目标代码体积增大,反而降低缓存命中率和性能。
-
调试困难:内联函数可能使调试变得更加困难,因为函数调用堆栈可能不明显。