【发布时间】:2012-03-04 03:41:22
【问题描述】:
来自http://en.wikipedia.org/wiki/Stack_pointer#Structure
我想知道为什么函数的返回地址放在该函数的参数之上?
将返回地址在绘图线参数之前压入堆栈更有意义,因为当返回地址 被弹出以返回调用函数。
首选上图所示实现的原因是什么?
【问题讨论】:
-
请注意,这种安排不是 C++ 标准的一部分。它特定于单个 CPU、编译器和/或操作环境。那篇文章中描述的情况是典型的,对于 GCC/X86 是准确的,但绝不是普遍的。
-
参数和本地的数量可能不固定。如果返回地址不在中间,如何确定所有 3 个地址?
-
@Pubby:我没有答案,但这种情况也发生在 Locals of DrawSquare 和 Parameters of DrawLine 上。跨度>
-
这只是自然的执行顺序。调用者首先推送参数,然后是 CALL,然后函数为本地变量调整堆栈指针。以任何其他方式做都会效率低下。
标签: c++ function gcc callstack