关于入栈和出栈的理解:假设程序在运行,这个时候就会涉及到下面要说到的几个核心的寄存器(对栈进行操作)就是PC寄存器(为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC寄存器这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。)、CPU的Rx寄存器、累加器、SP寄存器-栈顶指针。详细解析多翻下资料鄙人能力有限这里简说啦。程序正常运行时,会用到了这几个寄存器,因为它们使用是不受限制的所以可以理解为:公用寄存器;

准备工作都做好了,下面描述下入栈和出栈到底是什么鬼! 《 栈的结构是“先进后出“的,就像我们玩的堆积木一样,往往最先放的那块放永远在最底下,它总是最先被压的对象。随着一直往上加积木,先放的总是被后放的压在下面,一直加一直加直到积木完成。综上所述估计你们已经猜到了这个游戏规则怎么玩了。没错就像你们想的一样!出栈原理:拆积木,而且总是从最上面拿掉积木,这个要记住。》
上面说到了SP寄存器-栈顶指针,这家伙是个主角 因为入栈和出栈都跟它有关系:入栈的时候作为栈顶新来的数据元素必定会压在栈顶的上面,出栈的时候作为栈顶底下被压着的数据元素随机一位要出栈的话原来栈顶让出,接着底下被压着的那位数据元素出来,出来后必定会压在栈顶的上面,因为刚才说了新来的总是在最上面。

一般来说栈有两种内存结构,一种是连续的,一种是不连续的,连续的基本上就是数组了,不连续的基本上就是按照链表类型存放的。链表类型就是说,每个节点都有个指针指向它下一个节点。这样链表就串起来了也就有了联系;

比如当我们的函数发生中断需要处理中断时是要进中断函数的,在中断函数里面也是要进行各种运算的,也需要用到那几个公用寄存器,怎么处理呢?这里入栈和出栈就派上用场了。入栈:寄存器元素先暂时写到内存里去也就是栈,在中断服务函数里面,照常使用公用寄存器进行运算,等在中断函数执行完毕后,出栈:刚刚暂时保存在内存里的元素重新读到公用寄存器,来来回回操作入栈和出栈就是这么个原理

还希望有大佬指出不足之处!

转载引用文章请声明文章来源于此处谢谢~

关于入栈和出栈的理解相关推荐

  1. php 栈、 出栈、入栈

    最近在面试的时候被问到栈,回来做个总结,希望对大家有帮助 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压 ...

  2. arm64入栈出栈_【iOS内功】ARM黑魔法—栈桢的入栈和出栈

    栈桢之谜 调用一个子函数,在内存上会入一个新的栈桢.子函数执行完了,当前栈桢会出栈.在运行时,栈桢的出栈和入栈的逻辑是怎么实现的呢? 这是一个很有趣的问题,也是一个重要的知识点,它是排查疑难Crash ...

  3. 数据结构(C语言第二版)严蔚敏编,数据结构电子教材,线性表,栈,队列,顺序存储结构,初始化,入栈,出栈,入队,出队,c++

    前言 提示:本篇文章收录严蔚敏编写的数据结构C语言版本 简单介绍一下顺序表,顺序栈,循环队列,的顺序存储结构之间的区别 代码参考严蔚敏编写的<数据结构>,二维码动态演示可扫码可观看. - ...

  4. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  5. 通俗讲解入栈、出栈(C语言)

    ** 解释入栈出栈原理: 栈的结构是"先进后出"的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆.前一个放上去的总是被后一个放上去的压在底下.那我当我再想里面放一 ...

  6. 数据结构:顺序栈基本操作(入栈和出栈)C语言详解(转载)by解学武

    本文为解学武教程的免费章节 什么是顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如 ...

  7. c语言堆栈基本代码入栈出栈_顺序栈基本操作(入栈和出栈)C语言详解

    顺序,即用{1,2,3,4},存储状态如 图 1 顺序表存储 {1,2,3,4} 同样,使用栈存储结构存储 {1,2,3,4},其存储状态如图 2 所示: 图 2 栈结构存储 {1,2,3,4} 通过 ...

  8. 面试题之判断栈的入栈和出栈序列的合法性

    完整题目是这样的:给我们两个序列,第一个序列表示栈的压入顺序,然后让判断第二个序列是不是是否是该栈的弹出序列.现设第一个序列为[1,2,3,4,5],第二个序列为[3,2,5,4,1],可以看出这个出 ...

  9. N个数依次入栈,出栈顺序有多少种?

    对于每一个数来说,必须进栈一次.出栈一次.我们把进栈设为状态'1',出栈设为状态'0'.n个数的所有状态对应n个1和n个0组成的2n位二进制数.由于等待入栈的操作数按照1‥n的顺序排列.入栈的操作数b ...

最新文章

  1. 紫色回归线:雅虎中国的运筹学
  2. ckeditor java 使用,CKEditor5在自定义数据处理器中使用模型
  3. 【Accelerated C++】重点回顾(续)
  4. Linux 常用测试命令
  5. oracle rlw,Oracle数据库终于支持R语言 发力数据挖掘
  6. 从 Go 语言一个文件描述符错误讲起
  7. ioc,di,aop详解
  8. zTree加Layui 实现增加和删除,有子节点不允许删除
  9. c++ 二维数组_C|数形结合理解数组指针、指针数组、一级指针来遍历二维数组
  10. excel oss 上传_阿里云对象存储OSS全系统教程
  11. 还贷款 月供贷款计算
  12. 数据结构基础之堆排序
  13. 我的sulley安装过程
  14. Guitar Pro8最新版 学吉他打谱必备的APP
  15. 百度地图定位+卫星定位
  16. vue [ECharts] Unkown series surface
  17. mysql项目练习_mysql练习项目 - osc_wy5qpqnh的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. 实时动作识别和动作模仿-智能机器人QA200R-全爱科技 全场景AI-QUANAI ROBOT
  19. 一个canvas实现的画板
  20. 基于android的流动人口管理移动APP(ssm+uinapp+Mysql)

热门文章

  1. 告诉你领导喜欢的下属类型
  2. 关于数字化校园建设的一些思考
  3. c++主函数中调用类内函数的方法
  4. 【Linux基础】Windows10安装Ubuntu20.04双系统
  5. 川核哆唯VR “元”教育|让教学活过来,让学习身临其境
  6. \r \r\n \t的区别,是什么意思
  7. 视频智能分析盒子-ai边缘计算盒子
  8. Scss或Less中:global{...}的作用
  9. 关闭所有oracle服务,启动/关闭oracle服务有三种方式
  10. c语言打开当前目录下的文件_干货||嵌入式Linux下的C编程知识要点总结