第111页到第117页

拆箱装箱的操作存在于这样的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代码乐趣多。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值