C ++函数返回在堆栈上创建的对象

时间:2015-02-21 09:51:08

标签: c++ x86 stack cpu-registers

我知道当我使用__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架构)。

谢谢!

1 个答案:

答案 0 :(得分:1)

返回值仅放置在寄存器中,用于足够小的数据类型。否则,它们将作为副本返回到堆栈中。或者有时可以删除副本。