存放数据的区别:
栈:主要用来记录程序集的运行过程,它有严格的存储和访问顺序
堆:主要存储 程序运行期间产生的一些数据,几乎没有顺序的概念。
栈:主要存放程序运行期间的一些临时变量,包括值类型对象以及引用类型对象的引用部分
堆:主要存放引用类型对象的实例部分
栈中的数据会随着程序的不停执行自动存入和移除,堆中的数据则有CLR管理。
堆中对象的出生和死亡:
栈中的对象由系统负责自动存入和移除,正常情况下,跟我们程序开发的关联并不大。
CLR管理堆中对象内存时,是根据该对象的当前引用数目(包括栈和堆中),如果引用数目为零,那么CLR就会在某一个时间将该对象在堆中的内存回收。也就是说,堆中的对象实例存在的时间永远比栈中对象引用存在的时间长。