сборка — c ++, как объект-значение возвращается из функции в деталях

Встроенные типы, такие как int, char и т. Д., Могут быть возвращены из функции с помощью регистров, но что, если функция возвращает некоторый большой объект. Я полагаю, что стек процесса не может быть использован для такой проблемы, я прав? Может ли кто-нибудь объяснить, как объект передается вызываемому объекту?

SomeObj function() {
SomeObj someObj;
return someObj;
}

2

Решение

Обычно в большинстве компиляторов стек используется для этой цели. Даже для крупных объектов это все еще так. Вызывающая функция ожидает найти значение вызываемой функции в стеке, когда вызываемая функция возвращается.

Одно из решений — зарезервировать область стека до вызова функции. Вызываемая функция может получить доступ к этой области, чтобы заполнить ее результатом (в конце концов, доступ к стеку не ограничен вершиной).

3

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