C#中的堆栈和堆的区别与联系
堆栈和堆得区别:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
堆和堆栈的垃圾回收:
堆栈不存在垃圾回收的问题, 直接压栈就可以了。
堆的话,需要复杂的垃圾回收机制。
垃圾回收是对堆来进行操作,堆中的对象是否有效, 是通过遍历堆栈来获取的, 就是一个引用计数的问题。
一个引用类型的实例化过程:
Class a = new Class();
1) Class a 的时候, 生成一个空的引用指针,并把他压栈到堆栈中。
2)new Class() 生成一个类的实例, 并且在堆上分配对应内存。
3 ) = 赋值的时候, a的引用指向新生成的实例。