我认为这个问题与语言无关,如果它非常简陋,我会道歉,但我们说(在本例中为PHP)
function myFunc() {
return 4;
}
现在调用此函数时,通常会将结果用于表达式或分配给变量。但是,如果它没有分配给变量,那么返回值在被调用时会“活动”在哪里?是否有内部结构将其保留在内存中以用于当前语句的目的,并且当执行该语句时,它会再次将其删除?
答案 0 :(得分:2)
如果您只是执行以下操作:
var foo = bar();
myFunc();
var wibble = baz();
然后将为return语句创建一个Number 4
,然后立即将其丢弃,因为没有任何对它的引用。
答案 1 :(得分:1)
(注意:C ++特定的)在大多数情况下,编译器将使用 Return Value Optimisation 并将值存储在获取分配给函数结果的变量中。
例如:
int myInt = myFunc();
会将myInt
变量指针传递给堆栈上的myFunc
,因此myFunc
将直接与myInt
一起使用,而不会创建新变量。
否则函数通过将返回值放在堆栈上来返回。
我认为在.NET中它被称为Name Return Value Optimization。
其他编译器可能具有相似的功能。
答案 2 :(得分:0)
所以说我们有一个更复杂的语句,比如myFunc()+ ComplexFunction()
我认为这个取决于编译器而且它是register allocation scheme。
编译器可以将myFunc()
的结果存储在寄存器中,然后跳转到执行ComplexFunction()
。在输入ComplexFunction()
时,寄存器将保存在堆栈中,并在返回时恢复。