Я прочитал в Computer Systems перспективу программиста, что при программировании в ассемблере в соглашении относительно протокола вызывающего абонента указано, что возвращаемое значение функции должны храниться в регистре eax (или аналоговом rax, в 64-битном компьютере).
Я предполагаю, что это то, что автоматически происходит "за кулисами" при программировании на C, то есть компилятор C "знает", чтобы использовать регистр eax для возвращаемых значений функций.
Но что происходит в С++, когда возвращаемое значение является большим объектом, который не вписывается в 32-разрядный регистр eax или 64-бит rax? Очевидно, вы не можете передать это с помощью стека, так как компилятор обрабатывает операцию возврата по значению большого объекта?
Не обращайте внимания на большой объект, как компилятор C обрабатывает возвращаемую стоимость большой структуры?
Сохраняет ли он его во временном пространстве памяти и возвращает его адрес как возвращаемое значение? Если это так, он должен предсказать, сколько вызовов нужно делать с функцией во время выполнения, а иногда это невозможно, не так ли?