栈和栈帧(二)

栈帧

所谓栈帧是在栈中专门为某个过程分配的一块空间。每有一个过程就会生成一个栈帧。栈帧有两个寄存器确定,帧指针ebp和栈指针esp。对于一个栈帧,帧指针ebp是固定的,因此在一个栈帧中可以将帧指针作为基准指针,其他存储内容都可以以帧指针为基准求相对位置。而栈指针esp则总是指向栈顶的。依然以上篇文章中的p函数调用q函数的例子为背景。首先栈中会有p过程的栈帧,当在p过程中调用q过程时,会向上篇文章中介绍的将寄存器,返回地址等入栈,然后为q过程建立栈帧。建立栈帧的过程事实上就是开辟空间,当p的寄存器,返回地址都被入栈后,还要将ebp入栈,我理解就是将调用者p的ebp入栈,因为调用者p并未结束,在q函数结束后,p若想继续执行,则应该仍以其栈帧指针为基准地址,若不保存,在q的栈帧建立过程中,ebp会被重新赋值,将p的帧指针的值覆盖。当以上入栈保存工作都做完后,将esp的值赋给ebp这样新的栈帧就建立了。因为有了新的然后esp指针下移(因为入栈是向地址小的方向压入),这样新的栈帧就有了自己的存储空间。一个完整的栈帧就建立完成了。

 

由于今天不能上传图片了,就不能拿出实例了。我感觉这个概念我理解的还不够,应该在学习学习。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值