临时对象的内存何时释放

本文关键字:释放 何时 内存 临时对象 | 更新日期: 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使用,然后不再被认为是"正在使用"。在将来某个不确定的时间点,垃圾收集器将收集它。