C#装箱和拆箱


定义

装箱是将值类型转换为引用类型
拆箱是将引用类型转换为值类型

装箱的内存操作

  1. 在托管堆上分配一段内存(大小为值类型实例大小加上一个方法表指针和一个SyncBlockIndex)。
  2. 将值类型的数据拷贝到刚刚分配的内存中。
  3. 返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。

进行一次装箱要进行分配内存拷贝数据

拆箱的内存操作

  1. 首先获取托管堆中属于值类型那部分字段的地址,这一步是严格意义上的拆箱。
  2. 将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。

进行一次拆箱要进行拷贝数据

参考

https://www.bilibili.com/video/BV1eW411v76V?from=search&seid=11233487436428803311
https://blog.csdn.net/qiaoquan3/article/details/51439726


文章作者: 王梓臣
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王梓臣 !
 上一篇
Unity ShaderGraph Unity ShaderGraph
参考 https://zhuanlan.zhihu.com/p/35887656
2020-06-26 王梓臣
下一篇 
C++拷贝构造函数和赋值运算符 C++拷贝构造函数和赋值运算符
定义在默认情况下(用户没有定义,但是也没有显式的删除),编译器会自动的隐式生成一个拷贝构造函数和赋值运算符。但用户可以使用delete来指定不生成拷贝构造函数和赋值运算符,这样的对象就不能通过值传递,也不能进行赋值运算。 显示定义: cla
2020-06-22
  目录