inline内联函数和普通函数的区别
inline
函数在编译过程中,没有函数调用开销了,在调用点直接把函数代码展开处理了- 函数调用参数压栈,栈帧的开辟和回退过程,函数调用开销大
inline
函数不再生成相应的函数符号inline
只是对编译器建议把函数处理成内联函数- 不是所有
inline
都会被编译器处理成内联函数,如递归,因为不知道展开几次 debug
版本上inline
无效,只在release
版本可用
使用如下指令测试可发现没生成函数符号
gcc -c main main.cpp -O2 objdump -t main.o
如下是一个内联函数的例子:
inline int sum(int x, int y) // *.o sum_int_int .text
{
return x + y;
}
int main()
{
int a = 10;
int b = 20;
int ret = sum(a, b);
// 此处有标准的函数调用过程 参数压栈,函数栈帧的开辟和回退过程
// 有函数调用的开销
// x+y mov add mov 1000000 x+y
return 0;
}