堆栈指针理解

堆栈指针理解堆栈指针 sp 在片内 RAM128B 中开辟栈区 并随时跟踪栈顶地址 它是按 先进后出 的原则存取数据 开机复位后 单片机栈底地址为 07H 主要用来保存临时数据 局部变量和中断 自程序的返回地址 堆栈指针总是指向栈顶元素 所以数据入栈的时候 堆栈指针先加 1 再压栈 向上增长方式 和计算机的方式一样 出栈的时候先弹出数据 堆栈指针再减 1 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 如果堆栈的实现是往上长的 就是说往顶

 堆栈指针sp在片内RAM128B中开辟栈区,并随时跟踪栈顶地址。它是按”先进后出”的原则存取数据。开机复位后,单片机栈底地址为07H。

主要用来保存临时数据,局部变量和中断/自程序的返回地址。

堆栈指针总是指向栈顶元素。所以数据入栈的时候,堆栈指针先加1,再压栈。向上增长方式。和计算机的方式一样。

出栈的时候先弹出数据,堆栈指针再减1。

        如果堆栈的实现是往上长的(就是说往顶的方向长,其实质是你的栈底是定死的不能动,入栈的东西只能不断往上叠,这就像你在书桌上放书一样,桌底是定死的,所以你的书只能一本一本地往上堆,往上长),计算机内部的堆栈的实现采取的就是这种模式,所以就得像你说的那样,“先修改指针,然后插入数据,出栈时刚好相反”,因为你堆栈指针指向的总是栈顶元素,栈底不能动,所以数据入栈前要先修改指针使它指向新的空余空间然后再把数据存进去,出栈的时候自然相反。

        然而,如果堆栈的实现是往下长的(就是说你每压一个元素入栈,栈底就自动下移一个元素的位置,其实质就是这种堆栈模型是一个“无底洞”型),这个时候,你的栈顶就变成了定死的,你就可以先压入元素,然后再修改指针。因为你的栈底是无限的,你压入一个元素,新的元素就取代先前的栈顶元素占据栈顶的位置,那么你先前的指向栈顶元素的指针这个时候就该修改让它指向这个新的栈顶元素了。

        话说回来,计算机内部肯定选第一种模型,不会选第二种,因为第二种模型,每压入一个新的元素,都需要把之前堆栈里的所有元素整体下移动一个元素的位置,腾出栈顶元素的位置让新的元素进来,这种平移可是一笔不小的开销啊!但是并不是说“无底洞”模型就没办法实现了,其实它可以通过第一种模型来模拟的,每需要压入一个新的元素的时候,就先开辟一个空间,数据存入这个空间,然后再修改栈顶元素指针使其指向这个新的栈顶元素。

        换句话说,用链表的话,只要有足够的空间可开辟出来作为一个节点,那么两种堆栈模型都能实现(当然“无底洞”型还是如我上面说的那样用第一种模拟出来的,否则平移的工作量相当可观),如果用数组,由于数组在内存中是连续分配出来的空间,用第一种模型更自然一些

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204629.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:53
下一篇 2026年3月19日 下午7:54


相关推荐

  • 用matlab画三维图实例_cad绘制3d图形的教程

    用matlab画三维图实例_cad绘制3d图形的教程文章目录一、引言二、绘制三维空间曲线三、绘制三维空间曲面1.基本概念2.示例(1)3.示例(2)4.等高线的曲面图5.被光照射带阴影的曲面6.图形修饰方法四、绘制等高线一、引言一图胜前言,本篇文章的目的就是绘制这样的三维图形二、绘制三维空间曲线plot3——基本的三维曲线绘制命令调用格式:plot3(x,y,z)——x,y,z是长度相同的向量plot3(X,Y,Z)——X,Y,Z是维数相同的矩阵plot3(x,y,z,’s’)——开关量字符串s用来设定曲线颜色和

    2022年10月11日
    5
  • 【边缘计算】边缘计算元年一文看懂云边协同!九大场景带来新一轮信息革命…

    【边缘计算】边缘计算元年一文看懂云边协同!九大场景带来新一轮信息革命…来源:产业智能官2019年边缘计算备受产业关注,一度引起了资本市场的投资热潮,很多人把2019年称作边缘计算的元年。理性来看,造成如此火爆局势难免有一些炒作因素在推…

    2022年6月22日
    47
  • DeepSeek 部署指南 (使用 vLLM 本地部署)

    DeepSeek 部署指南 (使用 vLLM 本地部署)

    2026年3月16日
    2
  • 枚举类型

    枚举类型

    2021年9月16日
    47
  • FPGA中的HPS

    FPGA中的HPS使用轻量级 HPS to FPGA 桥接器连接需要由 HPS 控制的 IP 轻量级 HPS 到 FPGA 桥接器允许 HPS 中的主设备访问 SoC 器件的 FPGA 部分中的内存映射控制的从端口 通常 只有 HPS 内部的 MPU 访问此桥接器才能执行对 FPGA 中外设的控制和状态寄存器访问 不要将轻量级 HPS to FPGA 桥用于 FPGA 存储器 而是将 HPS to FPGA 桥用于存储器 HPS to FPGA 桥接器旨在

    2026年3月18日
    1
  • excel 自动生成目录

    excel 自动生成目录1 按一下图中 4 步操作 图中第三步要特别注意 是当前 exel 要生成目录的 sheet 名图 4 输入 INDEX GET WORKBOOK 1 ROW A1 amp T NOW 2 在 sheet 首页 的 A 列 也可以是任意你想要生成目录的列 IFERROR HYPERLINK 目录 2 amp A1 MID 目录 2 FIND 目录 2 1 99 即可生成想要目录

    2026年3月11日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号