函数的系统开销并不小:内联函数产生的原因

有时不由得怀疑为什么会有内联函数呢?

直到事实发现才知道原来内联真的很节约内在。因为在调用函数时会有一些诸如保存当前地址等的系统开销。不要小看。

一段小的子函数,系统开销相对于子函数本身却大多了。

#include <iostream>
using namespace std;
int* sum()
{
	int a=10;//栈中值,退出子函数,a消亡,但对应内存值却在 
	int *q=&a;
	return q;
}
int main(int argc, char *argv[])
{
	int a=3,*p;
	p=sum();
	int g[63]={0};//子函数完成后,弹出栈,这时改数组直到p把子函数中的a值“覆盖” 
	cout<<*p<<endl;
	return 0;
}

当数组g[N]中N值很小时,改变不了结果10的输出,我们一直改变它,直到刚好把10改写成0,说明了原函数到先前子函数在栈中a处的位置。

这段距离包含了系统开销,当我们改到63时结果是10,但64时就是0了。说明距离是63个int长度。由此可以看到:
     
     子函数并不大,但系统开销却不可小看。

内联函数就是为了节约这个不可小看的“系统开销”而引申出来的解决节约内存的办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值