我知道当我使用__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架构)。
谢谢!
答案 0 :(得分:1)
返回值仅放置在寄存器中,用于足够小的数据类型。否则,它们将作为副本返回到堆栈中。或者有时可以删除副本。