当调用new函数时,返回地址值发生了什么?

What happens with return address value when new function is called

本文关键字:地址 发生了 什么 返回 调用 new 函数      更新时间:2023-10-16

想象一下下面的代码

int main()
{
    f();
}
void f() { g(); }
void g() { cout << "hello" << endl; }

当f被调用时,在RA(返回地址)寄存器中存储了main中调用f的地址(f知道结束时跳转到哪里)。当f调用g时,它应该将RA设置为f中的地址,以便知道返回的位置。那么这是如何做到的呢?它是否将RA存储在临时位置或其他地方,而不是覆盖旧值?

谢谢。

在没有任何优化的情况下,您的示例中的通常过程:

  • main() -在栈上推送返回地址,调用f()。
  • f():推送返回地址,调用g()。
  • g():打印,然后弹出返回地址并移动到程序计数器登记。
  • f():弹出返回地址,进入程序计数器
  • main():结束程序。

这是理论。编译器可能会发出不同的代码。

编辑1:
要了解确切的细节,请告诉编译器打印汇编语言。