标签:
从内存执行的角度来看,值类型的内存分配在线程的堆栈上,而引用类型的内存分配在托管堆上。因此从值类型向引用类型的转换,势必牵涉到数据的拷贝与指针引用等操作。
装箱操作,大致过程为:在托管堆中分配新对象的内存,将值类型的字段拷贝到该内存中,然后返回该对象的地址,这样就完成了从值类型到引用类型的转变;拆箱操作,则是获取已装箱对象中来自值类型部分字段的地址。装箱与拆箱并非完全对称的互逆操作,拆箱并不包含字段的拷贝。
概念雷区:
值类型,提供了轻量型的数据结构,具有较少的内存开销,对系统性能有明显的作用。而缺点是:缺省方法表指针,因为无法在期望System.Object或其继承类的方法上调用值类型。
装箱过程解析
拆箱过程解析
1 public static void Main() 2 { 3 int i = 100; 4 //装箱 5 i.GetType(); 6 //未装箱 7 i.ToString(); 8 //显式装箱 9 object o = i; 10 Hashtable ht = new Hashtable(); 11 ht.Add("One", o); 12 ht.Add("Two", o); 13 }
GetType方法由System.Object类型提供,因此值类型调用时必须执行装箱操作;而ToString方法则由int类型覆盖,因此不会装箱。Hashtable的Add方法接受System.Object类型的参数,因此通过显式的类型转换来减少隐式的装箱操作。
标签:
原文地址:http://www.cnblogs.com/bicker/p/5289258.html