怎样理解操作系统中“栈”的概念?
答案:2 悬赏:30 手机版
解决时间 2021-03-27 12:32
- 提问者网友:寂寞撕碎了回忆
- 2021-03-27 06:33
怎样理解操作系统中“栈”的概念?
最佳答案
- 五星知识达人网友:英雄的欲望
- 2021-03-27 06:41
1、这没有为什么,C语言它就规定局部动态变量用完就销毁,所以在系统中专门划一块区域放这类变量。
2、这个栈不需要后进先出,它只满足“栈”的“只能在一端(称为栈顶(top))对数据项进行插入和删除”这个性质,你可以在不把其他元素出栈的前提下就直接访问栈底元素。追问谢谢你啦、、你的简洁些、、
2、这个栈不需要后进先出,它只满足“栈”的“只能在一端(称为栈顶(top))对数据项进行插入和删除”这个性质,你可以在不把其他元素出栈的前提下就直接访问栈底元素。追问谢谢你啦、、你的简洁些、、
全部回答
- 1楼网友:鸽屿
- 2021-03-27 07:37
1. 因为方便,毕竟在栈中弄一块数据只要给esp加点数字就行了,局部变量不值钱。堆就麻烦多了。
2. 对。这是数据栈的一个内建实现。但是你对局部变量的理解有误区,
局部变量访问靠的是ebp寄存器,如果你反汇编就会看到进入一个函数首先会:
push ebp // 保存ebp
mov ebp,esp // 将ebp用来指向函数栈区开头
sub esp,xxh // 初始化局部变量
函数栈区是我自己的叫法,不过要记得若是栈访问超出了这个区域那程序肯定错了。
然后访问a和b用的是[ebp-n]比如,[ebp-4]可能就指向你的a。
明白了吧,esp和ebp都是寄存器,esp是32位栈寄存器,会跟着push和pop操作变化值,也就是通常的数据栈实现中的那个顶部指针。ebp是基址寄存器,常年打酱油所以经常被这么用。
上面那家伙是怎么混到15级的 =.=追问貌似你们是一个意思嘛、、呵呵、
2. 对。这是数据栈的一个内建实现。但是你对局部变量的理解有误区,
局部变量访问靠的是ebp寄存器,如果你反汇编就会看到进入一个函数首先会:
push ebp // 保存ebp
mov ebp,esp // 将ebp用来指向函数栈区开头
sub esp,xxh // 初始化局部变量
函数栈区是我自己的叫法,不过要记得若是栈访问超出了这个区域那程序肯定错了。
然后访问a和b用的是[ebp-n]比如,[ebp-4]可能就指向你的a。
明白了吧,esp和ebp都是寄存器,esp是32位栈寄存器,会跟着push和pop操作变化值,也就是通常的数据栈实现中的那个顶部指针。ebp是基址寄存器,常年打酱油所以经常被这么用。
上面那家伙是怎么混到15级的 =.=追问貌似你们是一个意思嘛、、呵呵、
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯