From http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/ http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/
以下是函数执行时发生的步骤序列
称为:
- 函数调用之外的指令地址被压入堆栈。这就是 CPU 在执行完任务后记住要去哪里的方式。
函数返回。
- 堆栈上为函数的返回类型腾出了空间。目前这只是一个占位符。
- CPU 跳转到函数的代码。
- 当前堆栈顶部保存在称为堆栈帧的特殊指针中。
- 在此之后添加到堆栈中的所有内容都被视为该函数的“本地”。
- 所有函数参数都放置在堆栈上。
- 函数内部的指令开始执行。
- 局部变量在定义时被压入堆栈。
我不确定第 6 点是如何运作的。如果所有函数参数都放在堆栈上,那么如何访问它们?
例如,如果有三个参数a
, b
and c
并从顶部像这样放置在堆栈上
| a |
| b |
| c |
| |
...
|___|
现在当函数想要访问时会发生什么c
? Are a
and b
蹦出来?
堆栈是一个隐喻堆栈。记住它仍然是一个RAM,因此如果您知道要查找的内容,则可以访问每个地址而无需弹出其余地址。
自从自动变量的大小在编译时已知- 编译器标记offset
对于每个变量,偏移量是从堆栈上的自动变量部分开始的位置确定的[或堆栈的头部,两者都是有效的,具体实现可能取决于体系结构],并且它仅通过以下方式访问它们:start + offset
对于每个变量的偏移量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)