如下代码

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:如果内联成功,函数将不再产生符号表

原文地址:https://www.cnblogs.com/erichome/archive/2022/10/13/16788277.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性