【C#基础】从堆栈看类型

1.什么是堆和栈?

栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义,栈负责保存代码的执行和调用过程;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小,负责保存对象和数据。

举例说明:将栈想象成一个自顶向下堆叠而成的盒子,每调用一次方法,应用程序所发生的事情记录在栈顶的一个盒子中,而我们每次只能使用栈顶的盒子来记录执行过程。堆大多用来保存信息,因此可在任意时间访问,可以比喻成一个仓库存储着所有的东西,里面是无章可循的没有排列的先后,但是需要的信息都可以在堆里面找到。


2.什么是值类型和引用类型

值类型和引用类型包含如下:

         

3.值类型和引用类型的区别:

1一般而言,值类型的数据存储在内存的栈中,引用类型存储在内存的堆中(这种说法不够严谨,为记忆便利)。

2从上面的举例当中也能够看出值类型(栈)的存取速度快,引用类型(堆)存取速度慢。

3值类型表示实际数据,引用类型表示指向存储在内存中的数据的指针或引用。

4值类型继承自System.Valuetype,引用类型继承自System.Object

5栈的内存自动释放,堆有GC(垃圾回收机制)

4.装箱和拆箱

装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作,作为一个桥梁的作用。装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。简单的来说:装箱就是值类型转换为引用类型;拆箱就是引用类型转换为值类型。

举例:

装箱是值类型到object 类型或到此值类型所实现的任何接口类型的隐式转换 int i = 10 ;object obj = i;
拆箱将引用类型转换为值类型,从object 类型到值类型或从接口类型到实现该接口的值类型的显式转换;:int i=0;Object obj=i;int j=(int)obj;  


发布了42 篇原创文章 · 获赞 22 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章