那先有个问题,什么是栈?
在数据结构中, 栈是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
在计算机系统中,栈也可以称之为栈内存是一个具有动态内存区域,存储函数内部(包括main函数)的局部变量和方法调用和函数参数值,是由系统自动分配的,一般速度较快;存储地址是连续且存在有限栈容量,会出现溢出现象程序可以将数据压入栈中,也可以将数据从栈顶弹出。压栈操作使得栈增大,而弹出操作使栈减小。
栈用于维护函数调用的上下文,离开了栈函数调用就没法实现。
而什么是栈帧(Stack Frame)呢?
每一次函数的调用,都会在调用栈(call stack)上维护一个独立的栈帧(stack frame).每个独立的栈帧一般包括:
在函数调用的过程中,有函数的调用者(caller)和被调用的函数(callee).
调用者需要知道被调用者函数返回值;
被调用者需要知道传入的参数和返回的地址;
函数调用分为以下几步:
push ebp
</br>mov ebp, esp
</br>sub esp, XXX
</br>函数返回分为以下几步:
mov eax, xxx
mov ebp, esp
pop ebp
ret
原文:https://www.cnblogs.com/lqh969696/p/10955513.html