为什么要用栈呢,入栈的作用是什么
为什么要用栈呢,入栈的作用是什么??? 为什么要发帖呢,百度的作用是什么???{:10_256:} ~风介~ 发表于 2016-3-8 21:28为什么要发帖呢,百度的作用是什么???
jonyu9527 发表于 2016-3-8 21:36
http://www.cnblogs.com/scnutiger/p/3770991.html ~风介~ 发表于 2016-3-8 22:12
http://www.cnblogs.com/scnutiger/p/3770991.html
这个说的很好,基本表达了意思~~我想如果要有深刻体会,还是要在应用中才有。 栈就相当于一个书柜可以放一些书在里面 入栈就是把数据放到里面... {:5_100:}感谢分享 发帖和百度都是一种好习惯{:5_91:} 一个寄存器可能被多次使用,有了栈以后,可以保护好数据,在调用的时候,进行恢复。然后栈还可以进行空间开辟。个人理解。 多学学吧,然后呢,这个栈的机制,是很有用的一个东西。好比说啊,你去书店里砍树去。然后呢,你的包包就得临时存放在人家柜台那里。这个时候,那个柜台,就是一个栈。其它的,暂时也说不出来。但是,可以确定,这是一个很有用的工作机制。
计算机变成里面,很多的东西,其实,都是可以给你诸多的思考的东西。当然,老外的话,他也不见得就去想过,去总结过这件事。但是,客观上,这里面,还是有很多的东西,哲学化的问题,这种收获,都是可以得到的。栈,个人,就非常喜欢这个机制。
C语言里面,谈到,局部变量放在栈中,动态内存分配的这个变量,好像是放在堆中的。然后呢,局部变量,放在栈中,栈的空间有限,当时觉得,这个栈不如堆有用。实际上,不见得。这种栈的工作机制,你可以联想一下你去书店里把东西放在柜台,以及说,有一天啊,你正在吃饭,突然要接个电话,然后再回头来吃饭,这里面,都有这种栈机制的应用。算是比较生活化的一个东西。很有趣的一个东西吧。 据说是为了保护现场你call之前把寄存器全部入栈结束时出栈 伤感、曲调 发表于 2018-6-5 15:13
据说是为了保护现场你call之前把寄存器全部入栈结束时出栈
我感觉,你应该是一个计算机科班出身的。 我用白话文
内存中没有栈一说,只是SS:SP寄存器指向的地址是栈对吧{:10_256:}
你应该考虑的是为什么要有先进后出的问题,内存中后进先出这种模式就是栈的表示
后进先出能干啥?为了啥?打个不恰当的比方,就打比方别挑毛病各位
a = 1;
b = 2;
c = a+b;
d = c+a;
想知道c的结果对吧 必须 a,b相加
想知道d的结果,必须c,a相加
那么如果这些都是函数,那么我先运行c,后运行d,这时候就像我运行c之后把他扔下面,然后被d使用,只有d不用了我才能逐级把你释放,递归一直调用自己,你咋能把原来的值释放,必须最后的解放了一层层的剥洋葱{:10_256:}
慢慢悟
你跟你女朋友出去旅游,需要找个地方住吧?那就要去住客栈了
然后住客栈需要付钱啊,所以你走前面进去给钱,你女朋友跟着进去
手续办完安顿好你们要出去购物去玩,你女朋友肯定比你积极
所以出去的时候就变成你女朋友在前面你在后面
栈就是暂时给你们个容身之所,然后按先进后出,先出后进就这样的顺序进出 虽然是坟贴,还是想表达下自己的意见。
内存在CPU看来就是一块连续的存储单元,但是物理上是由不同的存储器构成。把所有存储器组合在一起,由cpu编号,就是所谓的内存地址空间。每一个编号都是唯一,编号就是地址
cpu既然要处理数据,数据在哪里?在内存。由于CPU管理所有部件,那么他肯定对内存一套自己的管理方法。
cs指向的内存地址数据 cpu就按照指令处理
ds指向的内存地址数据 cpu就按照数据处理
ss指向的内存地址数据 cpu就按照栈处理
栈只是一种cpu对内存的操作手段,sp又要加又要减比较麻烦,那么就出了对应的指令 push pop 。只是管理手段而已,你也可以设计一个子函数,实现自己的push pop
关于为什么有栈的设计?我也不清楚。
栈原理:先进后出 为什么这样?CPU设计的别问为什么,为什么有姓名?为什么奥迪不叫迪奥,人家乐意,当然这样设计肯定有别人自己的原因。
个人理解:栈是为了实现类似C语言局部变量的功能!
页:
[1]