一些公共变量的常见堆栈

时间:2011-09-27 17:44:15

标签: c# stack heap

堆栈溢出中的某人回答“堆栈附加到一个线程,因此当线程退出堆栈时会被回收。”但是公共变量如何在线程执行完成后如何管理它们呢?

对于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会发生什么,它是否会存储在堆栈中并在线程退出时回收,或者它将保留在堆中,因为它是一个对象

2 个答案:

答案 0 :(得分:3)

在这里的示例中,k不是基于堆栈的变量 - 它是Form1类的一个字段,因此与表单实例一起存储。

button1_click的两个参数是基于堆栈的变量的示例。

答案 1 :(得分:0)

请看一下这篇解释C#.NET的内存管理和垃圾收集的文章

http://csharpcomputing.com/Tutorials/Lesson6.htm