内联函数的使用可以避免函数调用的开销
int max ( int a, int b ){ return a>b ? a: b;}
对于以上函数,函数体只有一行,执行起来比求原来的表达还要慢。
在大多数机器上,一次函数调用包含一系列工作:调用前要先保存寄存器,并在返回是恢复;如果需要,可能还要拷贝实参;程序转向一个新的位置继续执行。这些操作由编译器自己完成,将它称为函数调用的基本开销。这就是说,即使函数体为空,在调用它的时候仍然耗费了一定的CPU. 为了避免这种低效率的事情发生,当发现函数体较短时,将函数声明为inline,此时编译器会做特定优化:不使用函数调用机制,而是直接把代码逻辑直接“内联”到调用点上。
因为省去了函数的调用机制,代码的运行效率提高。
注:什么情况“长”,什么情况“短”,是由编译器自己衡量的。即使将函数声明为inline,编译器也不一定会按inline编译。如果它发现代码实际上很“长”,它还是会按函数第哦啊用的方式来编译。即内联只是向编译器发出一个请求,编译器可以选择忽略这个请求。(编译器:我说了算)