【问题标题】:c++ how does object-value return from function in detailsc++ 对象值如何从函数返回详细信息
【发布时间】:2015-01-16 06:46:40
【问题描述】:

嵌入式类型如 int、char 等可以使用寄存器从函数返回,但如果函数返回一些大对象怎么办。我建议不能将进程的堆栈用于此类问题,对吗?谁能解释对象如何传递给被调用者?

SomeObj function() {
    SomeObj someObj;
    return someObj;
}

【问题讨论】:

  • 为什么堆栈不起作用?!堆栈限制取决于操作系统,大多数大型对象在堆上创建或数据以及它在堆栈上自身的对象。
  • @Doggynub 能否指定函数调用/退出时返回值被压入堆栈时的特定时刻?
  • 您应该指定您所询问的架构。另外,请阅读相应的文档。

标签: c++ assembly stack cdecl


【解决方案1】:

通常在大多数编译器中,堆栈用于此目的。即使对于大型物体,情况仍然如此。当被调用函数返回时,调用函数期望在堆栈上找到被调用函数的值。

其中一种解决方案是在调用函数之前保留堆栈区域。被调用的函数可以访问该区域以填充结果(对堆栈的访问毕竟不限于顶部)。

【讨论】:

  • 被调用者返回地址不是比你可以在被调用函数中放入堆栈的任何值更深吗?被调用函数是否从栈中弹出被调用者返回地址,然后放入要返回的对象,然后跳转到弹出的地址?
  • 这是由编译器处理的,以便在被调用堆栈中有一个指针,该指针指向 calLee 堆栈中返回的数据被移动到的某个位置
  • 解决方案之一是在调用函数之前保留堆栈区域。被调用的函数可以访问该区域以填充结果(对堆栈的访问毕竟不限于顶部)。
  • 计算机内存是随机访问的。 “更深”不是障碍——只需根据需要从堆栈帧中添加或减去一堆字节即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
相关资源
最近更新 更多