1、首先对c#数据类型理解:分为值类型和引用类型,对应的内存分配在栈和堆,注意是托管堆。
2、内存分配
值类型只分配在栈中。
引用类型分配在内存与托管堆中
托管堆对应于垃圾回收
3、装箱拆箱是什么?
装箱:用于在垃圾回收托管堆中存储值类型,此时已经是引用类型,装箱时值类型到object或此值类型所实现的任何接口的隐式转换。(比如struct值类型接口)
拆箱:object类型到值类型或从接口类型到实现该接口的值类型转换。
4、装箱与拆箱的内部操作。
装箱:对值类型在堆中分配一个对象实例,并将该值类型复制到新的对象中,按三部进行。
step1:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针和一个SyncblockIndex)
step2:将值类型的实例字段拷贝到新的分配的内存中
step:返回托管堆中新分配对象的地址。这个地址就是一个引用类型的地址。