临时对象的内存何时释放
本文关键字:释放 何时 内存 临时对象 | 更新日期: 2023-09-27 18:02:20
如果我有以下代码
Public int SomeFunct()
{
int temp;
Int32.Parse(txtbox.Text, out temp);
return temp;
}
我使用了一个临时int。那么在函数执行结束后,何时释放int(或任何使用的临时对象)的内存?或者,是否有需要显式调用的代码?
在这种情况下,temp
变量很可能是在堆栈上分配的,或者是在寄存器中分配的。
我说"最有可能",因为据我所知,这层代码的确切工作是特定于实现的。
当方法返回时,堆栈上的将被释放。如果它被放置在寄存器中,那么寄存器将在某个时刻被重用,并且当方法返回时将停止任何特定的意义。
在这种情况下,我认为总结一下,当方法返回时,它将被"释放"。
还要注意,虽然。net中的所有类型都继承自System.Object
,但短语"对象"通常用于引用类型。int
是一个值类型,不分配给堆。
如果你还意味着"临时对象发生了什么",那么垃圾收集器将在以后某个不确定的时间点收集这些对象。
例如这段代码:
public void Log(int value)
{
Debug.WriteLine(value);
}
这里我们使用了Debug的重载。WriteLine接受一个object
参数。在这种情况下,int
的值将被装箱,这意味着将在堆上分配一个对象来保存int
。
这个临时对象将被Debug.WriteLine
使用,然后不再被认为是"正在使用"。在将来某个不确定的时间点,垃圾收集器将收集它。