<五>理解inline内联函数

如下代码

using namespace std;

int sum(int a,int b){
	return a + b;	
}
int main(){	
    int a =1;
    int b =2;
    int ret =sum(a,b);
    return 0;
}

上面sum函数调用,会涉及到参数压栈,函数栈帧的开辟及回退过程,因此在函数调用的过程时候是会有开销的
sum函数的核心功能转成汇编指令即 1:将x的值放入寄存器 2:再将y的值和寄存器内容相加
为了使用这个非常简单的功能,我们需要做许多额外的动作,例如压函数参数入栈,压下一条执行指令地址入栈,将main函数的栈底指针压栈,为sum 函数开辟栈帧,
这一些系列动作产生的汇编指令远远多于x+y产生的指令, 这个就是说函数的调用开销远远大于函数功能指令,这种情况下我们可以考虑内联函数

如下代码

using namespace std;

inline int sum(int a,int b){
return a + b;
}
int main(){
int a =1;
int b =2;
int ret =sum(a,b);
return 0;
}
inline内联函数:在函数编译的过程中,就不会产生函数调用开销了,在函数的调用点直接把函数的代码进行展开处理了,
同时inline函数不再产生相应的函数符号

但是注意:不是所有的内联函数都会被编译器处理成内联函数,比如递归

所以inline只是建议编译器把这个函数处理成内联函数,结果取决于编译器,有没有内联成功可以 看看符号表,函数是否产生符号.

debug版本下,inline是不起作用,只有在release版本下才起作用

内联函数于普通函数有什么区别?
1:普通函数的调用会有函数开销
2:内联函数在编译的过程中,编译器会将函数代码做展开处理
3:如果内联成功,函数将不再产生符号表

posted @ 2022-10-13 15:59  Hello_Bugs  阅读(115)  评论(0编辑  收藏  举报