堆栈溢出中的某人回答“堆栈附加到一个线程,因此当线程退出堆栈时会被回收。”但是公共变量如何在线程执行完成后如何管理它们呢?
对于Ex。声明的公共变量如
public partial class Form1 : Form
{
int k = 10;
private void button1_Click(object sender, EventArgs e)
{
k = k + 5;
}
}
因此,每当我们点击button1时,就会创建一个更新k值然后存在的线程,因此应该回收这个语句堆栈,并且应该丢失k的最近值,但实际上它存储了该值并且下一次按钮点击将改变其保留值为ex。从1)10到15 2)15到20 3)20到25等....
所以我的问题是存储这样的全局变量的位置。是否有任何其他堆栈用于全局变量。另外,我将在函数内部使用类的对象。比如
public function add (int a, int b)
{
int c;
clsitem objitem = new clsitem();
c=a+b + objitem.id;
retun c;
}
那么objitem会发生什么,它是否会存储在堆栈中并在线程退出时回收,或者它将保留在堆中,因为它是一个对象
答案 0 :(得分:3)
在这里的示例中,k不是基于堆栈的变量 - 它是Form1类的一个字段,因此与表单实例一起存储。
button1_click的两个参数是基于堆栈的变量的示例。
答案 1 :(得分:0)
请看一下这篇解释C#.NET的内存管理和垃圾收集的文章