函数的栈帧过程

来源:互联网 发布:淘宝交电费 编辑:程序博客网 时间:2024/06/08 10:30

几乎所有的函数都使用了栈,没有栈就没有函数,没有局部变量。在程序运行过程中,栈保存了一个函数调用所需要的维护信息,也可称为堆栈帧或者活动记录

堆栈帧一般包括以下几个方面

        (1)函数的返回地址和参数

(2)临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量

(3)保存的上下文:包括在函数调用前后需要保持不变的寄存器

在I386中,一个函数的活动记录用esp和ebp这两个寄存器划定范围:

(1)esp:始终指向栈顶,同时也就指向当前函数的活动记录的顶部;

(2)ebp:又被称为栈指针,指向了函数活动记录的一个固定位置。