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