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

来源:互联网 发布:医院在用的数据库产品 编辑:程序博客网 时间:2024/05/15 23:53

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

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

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

#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长度。由此可以看到:
     
     子函数并不大,但系统开销却不可小看。

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

原创粉丝点击