调用新函数时返回地址值会发生什么

时间:2015-07-26 18:38:34

标签: c++ operating-system kernel return-value cpu-registers

想象一下这段代码

int main()
{
    f();
}

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

当调用f时,在RA(返回地址)寄存器中存储调用f的main中的地址(f表示完成时跳转的位置)。当f调用g时,它应该将RA设置为f,g中的地址以知道返回的位置。那怎么办?是将f存储在临时位置或其他地方,而不是覆盖旧值吗?

感谢。

1 个答案:

答案 0 :(得分:0)

没有任何优化,例子中的常用过程:

  • main() - 在&#34; stack&#34;上按下返回地址,调用f()。
  • f():按下返回地址,调用g()。
  • g():打印,然后弹出返回地址并进入程序计数器 注册
  • f():弹出返回地址,进入程序计数器
  • main():结束程序。

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

编辑1:
有关具体细节,请告诉编译器打印汇编语言。