Laz*_*zer 9 c++ gcc callstack function
来自http://en.wikipedia.org/wiki/Stack_pointer#Structure
我想知道为什么函数的返回地址放在该函数的参数之上?
在Drawline参数之前将返回地址压入堆栈更有意义,因为当弹出返回地址以返回到调用函数时,不再需要参数.
更喜欢上图所示实现的原因是什么?
ami*_*mit 6
返回地址通常是通过call机器命令[在本机语言的指令集中 ]推送的,而参数和变量是通过编译器创建的多个机器命令推送的.
call
因此,返回地址是调用者推送的最后一个东西,并且在被调用者推送的任何[局部变量]之前.
这些参数都在返回地址之前被推送,因为跳转到实际函数并将返回地址插入到堆栈中是在同一个机器命令中完成的.
另外,另一个原因是 - 调用者是在堆栈上为参数分配空间的一个 - 它[调用者]也应该是清理它的人.
归档时间:
14 年,2 月 前
查看次数:
3046 次
最近记录: