我正在阅读Jon Skeet的《深入C#》。引用第三章:
JIT可以以特别聪明的方式处理值类型,从而在许多情况下消除装箱和拆箱。 在某些情况下,这可以在速度和内存消耗方面对性能产生巨大影响。
有人能解释一下这是什么意思吗?最好附带一个例子。
我正在阅读Jon Skeet的《深入C#》。引用第三章:
JIT可以以特别聪明的方式处理值类型,从而在许多情况下消除装箱和拆箱。 在某些情况下,这可以在速度和内存消耗方面对性能产生巨大影响。
有人能解释一下这是什么意思吗?最好附带一个例子。
List<int>
为例。它由真正的 int[]
支持,JIT 将专门为 int
类型参数编译代码,因此在 List<T>
中使用 T
的任何代码都应该得到任何优化,就像该代码仅适用于整数一样。// Java code!
List<Integer> integers = new ArrayList<Integer>();
integers.add(10);
int x = integers.get(0); // x = 10
这会在后台执行装箱和拆箱操作。相应的C#代码根本不涉及任何装箱。
我认为Jon的意思是许多这些类型并不被视为其定义类型的对象。例如,int类型不必被视为结构体,并且可以直接在寄存器中处理。两个整数的相加不是通过重载操作符来处理,而是由CPU直接完成。