Я знаю, что когда я использую __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).
Спасибо!
Возвращаемое значение помещается в регистр только для типов данных достаточно маленького размера. В противном случае они возвращаются в виде копии в стеке. Или иногда копия может быть удалена.