x86 — функция C ++, возвращающая объект, созданный в стеке

Я знаю, что когда я использую __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

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector