如果我有以下代码
Public int SomeFunct()
{
int temp;
Int32.Parse(txtbox.Text, out temp);
return temp;
}
我正在使用临时int。所以在函数执行结束后,什么时候释放int(或任何临时对象)的内存? 或者,是否有明确调用的代码?
答案 0 :(得分:7)
在这种情况下,很可能temp
变量要么在堆栈上分配,要么在寄存器中分配。
我说"最有可能"因为据我所知,这个级别的代码的确切工作是特定于实现的。
在堆栈上,当方法返回时,它将被释放。如果将它放在寄存器中,则寄存器将在某个时刻重用,并在方法返回时停止任何特定含义。
在这种情况下,我认为总结一下,它将被解除分配"当方法返回时。
另请注意,虽然.NET中的所有类型都继承自System.Object
,但短语" object"通常由引用类型使用。 int
是一个值类型,不在堆上分配。
如果你的意思是"临时对象会发生什么"然后垃圾收集器将在稍后的不确定时间点收集这些垃圾收集器。
例如这段代码:
public void Log(int value)
{
Debug.WriteLine(value);
}
我们在这里使用this overload of Debug.WriteLine that takes an object
parameter。在这种情况下,int
值将为boxed,这意味着将在堆上分配一个对象来保存我们的int
。
此临时对象将由Debug.WriteLine
使用,然后不再被视为"正在使用"。在某个未来不确定的时间点,垃圾收集器将收集它。