【问题标题】:C++ return value storage in a stack frameC++ 返回值存储在堆栈帧中
【发布时间】:2021-01-13 08:01:37
【问题描述】:
int f(int a, int b){
    return a+b;
}

int main(){
    f(1,2);
}

本例中,调用f函数时,没有具体的变量存储a b的相加结果。我的问题是:a+b 的结果将存储在哪里?

【问题讨论】:

  • 在典型的 ABI 中,int 将在 CPU 寄存器中返回。对于不适合寄存器的较大返回类型,实际上调用者提供的内存中有一个隐藏的void* 参数;该函数将其返回值放入该内存中。有关详细信息,请参阅编译器的文档 - 确切的机制取决于实现。
  • 这里的答案因编译器和操作系统而异。 C++ 标准没有具体要求。

标签: c++ stack callstack function-call


【解决方案1】:

它将被移动到一个临时寄存器。
它将加载值,然后调用 f(int,int) 看看拆解:

【讨论】:

  • 谢谢,我是新手,你用什么工具来显示反汇编代码?
  • 你可以使用编译器资源管理器(godbolt),它是免费的,它是在线的
猜你喜欢
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2017-09-06
  • 2015-02-06
  • 2014-09-06
  • 2013-08-24
  • 2011-07-18
  • 2015-03-13
相关资源
最近更新 更多