2012年4月2日
摘要: 值类型是比引用类型更"轻型"的一种类型,因为它们不作为对象在托管堆中分配,不会被垃圾回收,也不通过指针来引用。但在许多情况下,都需要获取对值类型的一个实例引用。为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制。一,装箱 装箱即将一个值类型转换成一个引用类型,下面是总结对值类型的一个实例进行装箱时内部发生的事情: 1,在托管堆中分配内存。内存量是值类型的各个字段需要的内存量加上托管堆的所有对象都有的两个额外成员(类型对象指针和同步块索引)需要的内存量。 2,将值类型的字段复制到新分配的堆内存。 3,返回对象的地址(或称指针)。现在,这个地址是对一个 阅读全文
posted @ 2012-04-02 12:14 永远的麦子 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 下面是FCL中值类型和引用类型的区别,用表格总结如下:值类型引用类型内存分配线程栈托管堆垃圾回收不考虑考虑表示形式未装箱和已装箱总是已装箱是否可以作为基类不能作为基类,不能有虚方法可以作为基类,也能有虚方法初始化的值0Null复制逐字段复制(深拷贝)只复制内存地址(浅拷贝)操作时影响只影响当前对象,不会影响另一个对象这个引用所对应的所有对象 下面是一个实际的例子详细说明了值类型和引用类型在内存中的布局,代码如下: namespace ValueTypeDemo1{ //值类型 struct SomeVal { public int x; } ... 阅读全文
posted @ 2012-04-02 10:01 永远的麦子 阅读(591) 评论(0) 推荐(0) 编辑