繁体   English   中英

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

[英]What happens with return address value when new function is called

想象一下这段代码

int main()
{
    f();
}

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

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

谢谢。

如果不做任何优化,示例中的通常过程为:

  • main()-将返回地址推入“堆栈”,调用f()。
  • f():推送返回地址,调用g()。
  • g():打印,然后弹出返回地址并移入程序计数器寄存器。
  • f():弹出返回地址,移入程序计数器
  • main():结束程序。

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

编辑1:
有关确切的细节,请告诉您的编译器打印汇编语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM