什么时候需要堆栈?

[复制链接]
4208|7
 楼主| 电子菜鸟435 发表于 2009-9-18 10:19 | 显示全部楼层 |阅读模式
堆栈是用保护数据的,一般的子程序调用都用不上,只有中断发生时才需要。可不可这样理解?
computer00 发表于 2009-9-18 11:25 | 显示全部楼层
不对。函数调用时,要保护返回地址,通常是压到栈里面去保存的。还有一些在子函数中要用到的寄存器值等,也要压到栈里面去保护。当函数返回时,需要恢复现场,并返回到原来的地方继续执行。
 楼主| 电子菜鸟435 发表于 2009-9-18 12:34 | 显示全部楼层
像ARM的函数调用时,返回地址可以保存到LR里,就可以不需要堆栈来保护返回地址了。所以是有的函数掉用可以不要用到堆栈。对吗?
computer00 发表于 2009-9-18 12:44 | 显示全部楼层
当该函数内部不再调用其它函数时,是可以这么干。但是如果它还要调用其它的函数呢?势必就会破坏LR,所以在调用其它函数之前,要把LR先保护起来,通常是压栈。
arm_fan168 发表于 2009-9-18 13:16 | 显示全部楼层
调用函数时的寄存器保护和开辟局部变量空间都需要堆栈啊
HWM 发表于 2009-9-18 13:26 | 显示全部楼层
堆栈是计算机中的最为基本的数据结构,以至于必须有硬件支持。可以说,没有堆栈就没有嵌套,没有堆栈就没有递归。而若没有了嵌套和递归,计算机会变的相当乏味,自然玩它的人的智商也高不到那里去了。
 楼主| 电子菜鸟435 发表于 2009-9-18 14:06 | 显示全部楼层
本帖最后由 电子菜鸟435 于 2009-9-18 14:37 编辑
当该函数内部不再调用其它函数时,是可以这么干。但是如果它还要调用其它的函数呢?势必就会破坏LR,所以在调用其它函数之前,要把LR先保护起来,通常是压栈。 ...
computer00 发表于 2009-9-18 12:44

知道了,谢谢computer00指点!
也谢谢arm_fan168HWM
电子write_cai 发表于 2011-8-27 16:27 | 显示全部楼层
computer00说的很好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

183

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部