Excel表格网

栈顶和栈底的区别?

285 2024-03-10 23:02 admin   手机版

一、栈顶和栈底的区别?

区别:使用效果不同,位置不同。

二、c51堆栈栈顶由什么表示?

c51堆栈顶由堆栈指针寄存器sp表示,堆栈指针寄存器存放着当前堆栈的内存地址,这个地址就是栈顶

三、栈底至栈顶依次存放元素A、B、C、D?

出栈序列可能是:DCBEA,选择D选项。 知识点:栈和队列的定义;栈和队列的顺序存储结构及其基本运算。 解析:栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、B、C、D,则表明这4个元素中D是最后进栈,B、C处于中间,A最早进栈。所以出栈时一定是先出D,再出C,最后出A。

四、简述什么是堆栈,以及堆栈中入栈,出栈的过程?

堆栈其实是两种数据结构。

堆栈都是一种数据项按序排列的数据结构,只能在一端 (称为栈顶(top)) 对数据项进行插入和删除。要点:堆,顺序随意。栈,后进先出(Last-In/First-Out)。针对栈这种数据结构的基本操作有两种:压栈和弹出, 在栈帧中包含两个标志----栈底和栈顶,其中栈顶标识着要push或pop 的数据的地址,而栈底则表示栈帧中最后一个数据的内存地址。在Win32中,寄存器esp存放着栈底指针,栈是向低地址方向生长, 因此esp指向栈顶元素 堆栈对比(操作系统): 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈栈使用的是一级缓存, 通常都是被调用时处于存储空间中,调用完毕立即释放 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些 堆(数据结构) :堆可以被看成是一棵树,如:堆排序 栈(数据结构) :一种后进先出的的数据结构 具体不同语言有不同的描述,可查看各种语言的api

五、ARM入栈的规则?

ARM寄存器入栈规则

主程序运行:

r0-r12通用寄存器,

r13(msp主/psp),

r14(lr),

r15(pc指向下一个待取指令地址[pc+4])

产生中断/异常:

push操作

growth 1 向下增长

addrhigh:0x2100

xpsr. xpsr. xpsr. xpsr. xpsr. xpsr. xpsr. xpsr …

pc. pc. pc. pc. pc. pc. pc

lr. lr. lr. lr. lr. lr

r12. r12. r12. r12. r12

r3. r3. r3. r3

r2. r2. r2

r1. r1

r0

r11————r4

addrlow:0x2000

stm32栈属于满递减栈

满代表指向被最新被push的栈元素而不是空

递减代表栈内元素地址更新从高到低递减

push之前栈空,msp栈指针指向栈地址+1(即空的地方,当有一个元素入栈之后,msp立刻指向这个元素)。

栈顶指针stk从xpsr变为自动push的r0,最终变为手动push的r4。

六、什么是弹栈指令堆栈?

压栈(入栈)PUSH指令,将数据保存在特定存储区内,按先进后出,后进先出原则保存。

弹栈(出栈)POP指令,将储存在堆栈中的数取出来,也是按先进后出,后进先出原则取数。

指针可以理解成用来指挥入栈出栈的一个通道,所有数的出入均由指针来指定。

七、队列,栈的指针,是指向队头,尾,栈底,栈顶所在元素的位置吗?

看实现编码的约定,如果是链表,队头和栈顶指针也许指向的是头结点,而并不是队头和栈顶元素的位置 如果是顺序存储,队列和栈的下标也许是下一个位置,也有可能是前一个位置,这个都得看代码是怎样设定的

八、8086汇编,栈顶是高地址还是低地址?

栈顶是低地址,栈底是高地址,esp指向的内存位置永远是栈顶,第一个进栈的数据是在栈底

你说的 1040H是栈顶,1080H是栈底,由于8086是16位的,所以每次入栈是2个字节,所以第一个数据占用的内存是 107FH和1080H

九、出栈后的栈顶元素是什么?

栈是一种数据结构,一个栈相当于一个盒子,把东西(数据)放入盒子里的过程叫做入栈,把东西从盒子里取出来的过程叫做出栈。

栈还有一个特殊的规则,就是先进后出,即盒子里的东西只能叠加摆放,放进去的下一件东西只能堆在前一件东西的上面,取出时只能先取出盒子最上面的一件东西。出栈也就是将栈指针所指的数据从栈中弹出的过程,每一次出栈的一定是栈顶元素,出栈后栈指针向下移动一位指向下一个元素。习惯上入栈用PUSH表示,出栈用POP表示。

十、8086堆栈是几位指令?

8086的堆栈操作都是字(16位)指令操作。

堆栈指令的操作数只能是存储器和寄存器操作数,而不能是立即数。

堆栈指令中堆栈指针SP是隐藏的操作数。

入栈时“先减后压”(SP先减2,再压入操作数),出栈时“先弹后加”(弹出操作数,SP加2)。

CS寄存器可以入栈PUSH,但是不能出栈POP。因为POP CS会改变代码段寄存器CS的内容。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片
上一篇:返回栏目