栈的引入~

计算机里面的栈其实有着举足轻重的作用。大学刚学c语言的时候,教的是堆栈,传达的是一种后入先出的算法思想。但其实我们知道,堆和栈是两个截然不同的东西。而这里面说到的栈,则是更融入到计算机系统里面,CPU结构的一部分。

对于的提出背景

对于一个函数设计里面,为了加速函数执行的速度和效率,提出使用cpu的寄存器传递参数, 但是由于寄存器数量有限,对于当函数内再想调用子函数的时候,再使用原有的cpu寄存器就会冲突了。 想利用寄存器传参,就必须在调用子函数前把寄存器当前函数的状态存储起来,然后当子函数退出的时候再恢复主函数。

所谓状态,即保存函数中的局部变量,因为对于函数而言,相互内部的局部变量是不影响的(除非在局部变量中创建一个引用类型的变量,因为该变量存储位置不再是栈中,而是在堆中)。面临的问题是,如何保存每一个函数(嵌套函数,即函数内部调用再次函数)中的局部变量呢【状态】???

的提出

争对上面的问题的解决方法,可以利用栈的结构体来解决寄存器传参的问题, 可以把当前寄存器中的值临时压入栈中(push),再执行函数的子函数,即子函数再次对寄存器进行传参,这样在栈中就会压栈(push),当执行完函数中的子函数时,出栈(pop),这样函数中的局部变量的使用就也利用了栈中的内存空间,最后利用栈指针的偏移来完成存取。 是函数的这些参数和变量的存储演变成记住一个栈指针的地址,每次函数被调用的时候,都配套一个栈指针地址,即使循环嵌套调用函数,只要对应函数栈指针是不同的,也不会出现冲突。利用栈,当函数不断调用的时候,不断的有参数局部变量入栈,栈里面会形成一个函数栈帧的结构,一个栈帧结构归属于一次函数的调用。栈的空间也是有限的,如果不限制的使用,就会出现典型的栈溢出的问题。

栈在操作系统中的意义

对于上面的函数切换机制,有了这样的先决条件,多任务就有了存在的基础。栈存在的意义所在!!!底层看出栈可以通过切换栈针来实现切换任务,即假如能控制找到每一个函数任务对应的栈针(栈针存储在堆栈寄存器中)即能操作cpu的调度,这就是实现多任务的本质。

补充

  • 对于每一个栈空间而言,每一个栈空间都是独立的【目的,保存当前函数(任务)的状态】
  • 多任务的底层本质是轮询切换机制
  • 是一种数据结构【先进后出】,对数据的处理,由寄存器处理一个任务转为可处理多个任务【底层是通过不断切换栈针来实现】
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

践行~渐远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值