为什么有函数调用栈?

Posted yudidi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么有函数调用栈?相关的知识,希望对你有一定的参考价值。

为什么引入栈

完成函数调用的过程,需要有个地方存放函数调用返回后要执行的指令地址(简称返回地址)
技术图片

极客时间-深入计算机组成原理

函数调用过程中,栈的使用

A1
call B
A3

B1
B2
retq
  • rip寄存器: 存放下一条要执行的指令地址
  • callq指令做两件事
  1. 把rip的地址A3压栈(也就是被调用函数返回后,调用者本来接下来会执行的那条指令的地址) // 本来这个指令地址都被放在rip了,正常情况就要执行了,但是被call指令弄走了.
  2. 把被调用函数的第一条指令地址放入rip,使得cpu下一个就开始执行子函数。
  • retq指令做1件事
  1. 把栈的A3弹出,放入rip。使得cpu加下来继续执行A函数。
    技术图片

深入理解计算机系统-3.7

以上是关于为什么有函数调用栈?的主要内容,如果未能解决你的问题,请参考以下文章

汇编调用c函数为什么要设置栈

C++函数调用栈分布详解

Python全栈开发之函数

函数调用的过程-栈

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数