何时释放临时对象的内存

时间:2015-07-13 11:43:35

标签: c# .net

如果我有以下代码

Public int SomeFunct()
{
    int temp;
    Int32.Parse(txtbox.Text, out temp);
    return temp;
}

我正在使用临时int。所以在函数执行结束后,什么时候释放int(或任何临时对象)的内存? 或者,是否有明确调用的代码?

1 个答案:

答案 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使用,然后不再被视为"正在使用"。在某个未来不确定的时间点,垃圾收集器将收集它。