【发布时间】:2015-04-23 00:59:52
【问题描述】:
我知道,当我使用__stdcall(对于其他调用约定也是如此)时,返回值存储在eax 寄存器中。
我想知道以下是如何发生的:
class MyObject
{
private:
int fourBytesInt;
long fourBytesLong;
char name[256];
};
MyObject ReturnMe()
{
MyObject myObj = MyObject();
return myObj;
}
int main(void)
{
MyObject myObj = ReturnMe();
return 0;
}
sizeof(myObj) 是 264 字节,ReturnMe 函数如何返回这么大的对象,因为寄存器最多可以容纳 32 位(x86 架构)。
谢谢!
【问题讨论】:
-
因为编译器会生成复制对象的代码。
-
或者就地构造对象(NRVO)。
标签: c++ x86 stack cpu-registers