传递参数 保存返回地址 分配栈帧 执行函数体 返回调用者(恢复栈帧)
’我们来看一个简单的函数
研究一下调用 add(5,10):
函数参数 局部变量 返回地址 寄存器保存(用于恢复调用者环境)
看一个套一套的
看这个情况,先main后B再A
也就是执行的时候是按照一个单独的个体来运行的,运行完转到下一个函数。
我们知道这个函数运行的时候很多时候会传入参数。而这个函数参数可以通过 寄存器传递 或 栈传递。
R0-R3(前 4 个参数) 超过 4 个参数时,使用栈传递
R0 = 5, R1 = 10 ADD R0, R0, R1 计算结果,存入 R0 BX LR 跳转到返回地址
x86(32-bit) 主要通过栈传递参数(push 指令)。 参数从右到左入栈,然后 call 进入函数。
举个栗子
三步走
+的数字是栈上面的指针
无限递归 局部变量过大 过深的函数调用
这就是出事的代码
优化方案
大的可以使用堆
再总结一下