内联函数


c语言在调用函数的时候,会先将所需参数入栈,然后把上层程序的执行位置记录在lr寄存器中,再将PC指向所调用的函数入口,然后将参数弹栈,开始运行。运行结束后传递返回值并回到上层函数的下一条语句。对于某些需要频繁执行且语句较少的函数且来说,这个过程消耗的CPU时间,甚至可能超过函数本身的业务代码。 内联函数能够解决这一问题,本质是以空间换时间。其作用是将函数展开,把函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。 如下风格的函数fun则成为内联函数:

void fun(int x, int y);
inline void fun(int x, int y)  //inline与函数的定义放在一起
{
...
}

注意

  • inline只适合函数体内代码比较简单的函数使用,不能包含复杂的结构控制语句
  • inline必须与函数定义放在一起
  • inline函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思
  • 内联是以代码膨胀为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。