【发布时间】:2012-03-04 02:16:37
【问题描述】:
来自http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/
以下是函数执行时发生的步骤顺序 叫:
- 函数调用之外的指令地址被压入堆栈。这就是 CPU 记住后去哪里的方式 函数返回。
- 在堆栈上为函数的返回类型腾出空间。目前这只是一个占位符。
- CPU 跳转到函数的代码。
- 堆栈的当前顶部保存在称为堆栈帧的特殊指针中。
- 在此之后添加到堆栈的所有内容都被视为函数的“本地”。
- 所有函数参数都放在堆栈上。
- 函数内部的指令开始执行。
- 局部变量在定义时被压入堆栈。
我不确定第 6 点的工作原理。如果所有函数参数都放在堆栈上,它们是如何访问的?
例如,如果有三个参数a、b 和c,并像这样从顶部放置在堆栈上
| a |
| b |
| c |
| |
...
|___|
现在当函数想要访问c 时会发生什么? a 和 b 弹出了吗?
【问题讨论】:
-
在我看来,第 3 步发生在第 6 步之前是不可能的:inside 应该有关于调用者评估的主体函数代码。废话!