打印

什么时候需要堆栈?

[复制链接]
3800|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先保护起来,通常是压栈。

使用特权

评论回复
5
arm_fan168| | 2009-9-18 13:16 | 只看该作者
调用函数时的寄存器保护和开辟局部变量空间都需要堆栈啊

使用特权

评论回复
6
HWM| | 2009-9-18 13:26 | 只看该作者
堆栈是计算机中的最为基本的数据结构,以至于必须有硬件支持。可以说,没有堆栈就没有嵌套,没有堆栈就没有递归。而若没有了嵌套和递归,计算机会变的相当乏味,自然玩它的人的智商也高不到那里去了。

使用特权

评论回复
7
电子菜鸟435|  楼主 | 2009-9-18 14:06 | 只看该作者
本帖最后由 电子菜鸟435 于 2009-9-18 14:37 编辑
当该函数内部不再调用其它函数时,是可以这么干。但是如果它还要调用其它的函数呢?势必就会破坏LR,所以在调用其它函数之前,要把LR先保护起来,通常是压栈。 ...
computer00 发表于 2009-9-18 12:44

知道了,谢谢computer00指点!
也谢谢arm_fan168HWM

使用特权

评论回复
8
电子write_cai| | 2011-8-27 16:27 | 只看该作者
computer00说的很好。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

183

帖子

1

粉丝