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)之前它在主函数中的最后位置
最佳答案
当我从(testFun)返回时,如何知道在调用(testFun)之前它在主函数中的最后一个位置
编译器解析代码并生成在CPU上运行的机器指令。函数调用会生成CALL
指令。函数退出时,将使用RET
指令返回到调用方。CALL
指令将紧跟CALL
本身的指令的地址压入调用堆栈,然后跳转到指定函数的起始地址。RET
指令从调用堆栈中弹出该地址,然后跳转到指定的地址。