Где хранится возвращаемое значение функции? - PullRequest
2 голосов
/ 02 марта 2011

Я предполагаю, что этот вопрос не зависит от языка и приносит извинения, если он довольно элементарный, но скажем, что мы имеем (PHP в этом примере)обычно результат будет использоваться в выражении или присваиваться переменной.Но если она не присвоена переменной, то где возвращаемое значение «живет», когда оно вызывается?Существует ли внутренняя структура, которая хранит его в памяти для целей текущего оператора, и когда этот оператор выполняется, он снова удаляет его?

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

Если вы просто сделаете что-то вроде:

var foo = bar();
myFunc();
var wibble = baz();

Затем для оператора return будет создан номер 4, а затем немедленно будет удален, поскольку на него нет ссылок.

1 голос
/ 02 марта 2011

( Примечание: специфично для C ++ ) В большинстве случаев компилятор будет использовать Оптимизация возвращаемого значения и сохранять значение в переменной, которая получает результат назначенной функции к.

Например:

int myInt = myFunc();

приведет к тому, что указатель на myInt будет доступен для передачи в myFunc в стеке, поэтому myFunc будет работать напрямую с myInt без создания новой переменной.

В противном случае функция возвращается, помещая возвращаемое значение в стек.

Я думаю, что в .NET это называется Имя Оптимизация возвращаемого значения .

Другие компиляторы, вероятно, имеют аналогичные функции.

0 голосов
/ 07 марта 2012

скажем, у нас был более сложный оператор, такой как myFunc () + ComplexFunction ()

Я думаю, что это зависит от компилятора, и это схема размещения регистров .

Компилятор может сохранить результат для myFunc() в регистре, а затем перейти к выполнению ComplexFunction(). При вводе ComplexFunction() регистры будут сохранены в стеке и восстановлены при возврате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...