【问题标题】:How i know the last instruction i were我怎么知道我的最后一条指令
【发布时间】:2020-02-03 19:33:00
【问题描述】:
int testFun(int A)
{
   return A+1;
}
int main()
{
   int x=0;
   int y= testFun(x)
   cout<<y;
}

正如我们所知,堆栈保存局部变量,这意味着当我在主函数中时,堆栈有变量(x 和 y),而当我调用函数(testFun)时,堆栈有变量(A) 当我从 (testFun) 返回时,堆栈弹出最后一帧 但是这里的问题是,当我从(testFun)返回时,它如何知道在调用(testFun)之前它在主函数中的最后一个位置

【问题讨论】:

标签: c++ function memory stack heap-memory


【解决方案1】:

当我从 (testFun) 返回时,它如何知道在调用 (testFun) 之前它在主函数中的最后位置

编译器解析代码并生成在 CPU 上运行的机器指令。函数调用产生CALL 指令。当函数退出时,使用RET指令返回给调用者。

CALL 指令将跟随CALL 本身的指令的地址压入调用堆栈,然后跳转到指定函数的起始地址。

RET 指令从调用堆栈中弹出该地址,然后跳转到指定地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2011-11-21
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多