设为首页 加入收藏

TOP

<五>理解inline内联函数
2023-07-23 13:31:49 】 浏览:36
Tags:< > 理解 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:如果内联成功,函数将不再产生符号表

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇驱动开发:内核枚举IoTimer定时器 下一篇驱动开发:内核枚举驱动内线程(答..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目