int sum(int x,int y){
return x+y;
}
int main(){
int a;
int b;
int ret = sum(a,b);
//此处有标准的函数调用过程:参数压栈,函数栈帧的开辟和回退过程
//所以有函数调用的开销
j return 0;
}
在编译过程中没有函数的调用开销了,在函数的调用点直接把函数的代码展开进行处理
inline int sum(int x,int y){
return x+y;
}
int main(){
int a;
int b;
int ret = sum(a,b);//相当于变成了int ret = a+b;
j return 0;
}
内联函数不会再生成相应的函数符号
不是所有inline都会被处理成内联函数比如:
1.递归:编译器不执行指令,因此不知道需要递归调用多少次,即展开函数多时少次
2.代码过多的函数
3.debug版本下inline不起作用,inline只在 release版本下才能出现
inline只是建议编译器处理成内联函数,决定权再编译器
Q:内联函数和普通函数的区别?
A:
1)普通函数有标准的函数调用过程:参数压栈,函数栈帧的开辟和回退过程,会有函数调用的开销。内联函数在编译过程中没有函数的调用开销了,在函数的调用点直接把函数的代码展开进行处理。
2)适合内联函数的局面:需要多次调用并且比较简单的函数
3)如果内联成功,不会在符号表生成此函数的符号