深入了解栈区

栈区是什么?

栈区是计算机内存的其中一部分,用于存储函数调用时存储该函数的局部变量、函数形参、返回地址等信息,栈是一种后进先出的结构。

栈区的定义和使用?

相信小伙伴们都会很困惑栈区既然是存储数据的,那么应该要怎么样去使用栈去存储呢?其实栈的使用在我们平时运行程序的时候就已经使用了,下面XxxHe来给小伙伴们说说叭~

首先,栈区的内存不是我们人为去控制的,而是由操作系统自动分配和释放的

在程序运行的时候系统就已经自动创建了一个主函数(main函数)的栈区,所以我们使用栈区其实就是在主函数内定义所有的局部变量和函数等数据都是存储在这个栈区(压入这个栈中)也叫压栈,也可以理解成栈就是一个水杯,往里面装水,后面装进来的水,会被先喝掉。下面给小伙伴们看  代码以及画图   感受一下

df850c8191fa449689db52c5eb7b3ee0.pngfae80d42ff9f44dc960c8edc214496b1.png

      注意:在主函数中调用函数的时候,程序会创建一个新的栈,首先把该函数中的返回地址先存入栈底中,(这个返回地址时再物理内存中的)

这是因为调用的函数执行完毕后,程序需要知道返回到哪里继续执行代码,所有,调用函数的时候程序会新建一个栈,首先把 返回地址 先存入栈中(也叫压入栈中),然后在跳转到该函数的入口开始执行这个函数,当被调用函数被执行完毕后,程序会从栈中取出返回地址,跳转回原来的函数继续执行代码。

下面我来给小伙伴们用代码演示一下:

int fun(int x)
{
	int y = x + 1;
	return y;
}

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 0;
->	fun(a);
	int c = 1;
	return 0;
}

4e4ba539243e40fcaed07a65d12a8173.png

当程序运行到->位置(fun(a) )的时候,程序会自动创建一个新的栈,首先把返回地址存入这块空间,然后跳转到函数的入口

f04f77644ec24a4bb665fec23f5a3fdb.png

然后再把函数的形参、局部变量等信息存入栈中

 771287fac5644f97ae960e1701102a2d.png

b8edf3e35b1b42dcb3961dd77224d2c7.pngd037560929324e739196158cb44c1a68.png新创建的栈

 当被调用函数执行到完后,也就是执行到了ruturn y,程序会把y放进返回地址中。然后通过返回地址带着y的值返回到了主函数中。

20f1521b419343778e671e53139e53ad.png

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值