2025年第111页到第117页

第111页到第117页拆箱装箱的操作存在于这样的 scenario 将值类型的对象和引用类型的对象相互赋值的时候 此时会存在堆上的内容和栈上的内容相互交换的过程 装箱时在堆上分配新内存 然后把栈上的内容拷贝到堆上 而拆箱本身只是获取一个指针的过程 这个指针是指向堆上装箱对象中那个未装箱的部分 在此 通过作者的描述

大家好,我是讯享网,很高兴认识大家。

拆箱装箱的操作存在于这样的scenario,将值类型的对象和引用类型的对象相互赋值的时候,此时会存在堆上的内容和栈上的内容相互交换的过程。

装箱时在堆上分配新内存,然后把栈上的内容拷贝到堆上。

而拆箱本身只是获取一个指针的过程,这个指针是指向堆上装箱对象中那个未装箱的部分。在此,通过作者的描述,我就很好奇所谓的装箱拆箱,对于内存是如何安排的,我猜测,它应该就是给加了个盖,其实装箱的东西必须要拆箱才能操作的。我很好奇这一段的,我想是有办法能够获知它究竟是怎么干的,那就是看IL代码,所以我决定,实践一下!

实践结果,尼玛,果然是个操作系统。。。。

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       19 (0x13)
  .maxstack  1
  .locals init ([0] int32 i,
           [1] object o,
           [2] int32 b)
  IL_0000:  nop
  IL_0001:  ldc.i4.s   10
  IL_0003:  stloc.0
  IL_0004:  ldloc.0
  IL_0005:  box        [mscorlib]System.Int32
  IL_000a:  stloc.1
  IL_000b:  ldloc.1
  IL_000c:  unbox.any  [mscorlib]System.Int32
  IL_0011:  stloc.2
  IL_0012:  ret


讯享网

} // end of method Program::Main

看看IL代码乐趣多。

有很多方法会有很多重载,这些重载的形参类型大都是值类型,之所以这样,就是为了减少装箱拆箱操作的次数,提升性能,降低内存开销。

效率不高,心不静,所以看得时间不算短,但效率比较低。撤退,明天补上。

小讯
上一篇 2025-02-24 11:16
下一篇 2025-03-08 09:58

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24671.html