【发布时间】:2015-10-16 21:34:24
【问题描述】:
想象一下这段代码
int main()
{
f();
}
void f() { g(); }
void g() { cout << "hello" << endl; }
当 f 被调用时,在 RA(返回地址)寄存器中存储调用 f 的 main 中的地址(f 知道在完成时跳转到哪里)。 f 调用 g 时,应该设置 RA 为 f 中的地址,g 知道返回到哪里。那么这是怎么做到的呢?是否将 f 的 RA 存储在临时位置或其他地方,而不是覆盖旧值?
谢谢。
【问题讨论】:
-
哪个编译器?这是 100% 实现定义的,与 C++ 语言几乎没有关系。我认为答案是“堆栈帧”。
-
我认为堆栈帧中存储的是返回值,而不是地址(否则RA寄存器将毫无意义)
-
嗯,我不知道你还期望它如何工作
-
使用你的编译器打印出汇编语言列表。
标签: c++ operating-system kernel return-value cpu-registers