为什么函数参数在调用堆栈之前的推送比返回地址更早?

Laz*_*zer 9 c++ gcc callstack function

来自http://en.wikipedia.org/wiki/Stack_pointer#Structure

在此输入图像描述

我想知道为什么函数的返回地址放在该函数的参数之上?

Drawline参数之前将返回地址压入堆栈更有意义,因为当弹出返回地址以返回到调用函数时,不再需要参数.

更喜欢上图所示实现的原因是什么?

ami*_*mit 6

返回地址通常是通过call机器命令[在本机语言的指令集中 ]推送的,而参数和变量是通过编译器创建的多个机器命令推送的.

因此,返回地址是调用者推送的最后一个东西,并且在被调用者推送的任何[局部变量]之前.

这些参数都在返回地址之前被推送,因为跳转到实际函数并将返回地址插入到堆栈中是在同一个机器命令中完成的.

另外,另一个原因是 - 调用者是在堆栈上为参数分配空间的一个 - 它[调用者]也应该是清理它的人.