gpt4 book ai didi

c - 被调用的函数在被调用后如何返回给调用者?

转载 作者:太空狗 更新时间:2023-10-29 16:39:49 24 4
gpt4 key购买 nike

我读到当程序调用函数时,被调用的函数必须知道如何返回到它的调用者。

我的问题是:被调用函数如何知道如何返回给它的调用者?是否有一种机制通过编译器在幕后工作?

最佳答案

编译器遵循特定的“调用约定”,定义为您所针对的 ABI 的一部分。该调用约定将包括一种让系统知道要返回哪个地址的方法。调用约定通常利用硬件对过程调用的支持。例如,在 Intel 上,返回地址被压入堆栈:

...the processor pushes the value of the EIP register (which contains the offset of the instruction following the CALL instruction) on the stack (for use later as a return-instruction pointer).

从函数返回是通过ret 指令完成的:

... the processor pops the return instruction pointer (offset) from the top of the stack into the EIP register and begins program execution at the new instruction pointer.

相比之下,在 ARM 上,返回地址放在链接寄存器中:

The BL and BLX instructions copy the address of the next instruction into lr (r14, the link register).

返回通常通过执行 movs pc, lr 将地址从链接寄存器复制回程序计数器寄存器来完成。

引用资料:

  1. Intel Software Developers Manual
  2. ARM Information Center

关于c - 被调用的函数在被调用后如何返回给调用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com