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