引用:可以理解为给一个变量起别名,或者和该变量共享一块空间

应用:引用传参、引用返回
目录
这里着重讲引用返回,在说引用返回之前,先说说函数栈帧的创建与销毁
函数栈帧创建时,会忽略寄存器ebx、esi的压栈
1、函数栈帧创建与销毁
(1) 准备工作
我们先准备一段简单的代码
#include <stdio.h>
int Add(int x,int y)
{
int z = x + y;
return z;
}
int main(){
int a = 10;
int b = 20;
int ret = Add(a,b);
return 0;
}
(2) 函数栈帧创建
=============== 调用Add函数之前的准备工作 ===============
程序开始运行的时候,OS为在栈上为 main函数开辟一块空间,然后在栈上存放局部变量

到了开始执行Add函数的时候,从右向左读取实参,将实参的拷贝放入寄存器 push 到栈顶

下面要跳转到Add函数,需要先记下 下一条指令的地址0CC2145,也就是 '' return 0;'' 这句代码的地址。即便离家,也得记住家的地址,下次回来知道要回哪

至此,进入Add函数的准备工作已经完成
=============== 执行Add函数 ===============
接下来OS会在栈上为Add函数开辟一块空间,并压到栈顶(栈的大小取决于函数中有多少变量)

本文详细探讨了函数调用中的引用返回与传值返回的原理、实际例子、效率比较以及适用场景,强调了避免局部变量引用的重要性。通过代码示例和实验数据,揭示了引用返回在大对象时的优势和局限。
最低0.47元/天 解锁文章
87

被折叠的 条评论
为什么被折叠?



