我正在阅读Jon Skeet的 C#。引自第三章:
JIT可以以特别聪明的方式处理价值类型 在许多情况下设法消除装箱和拆箱。在一些 在这两种情况下,这可以对性能产生巨大影响 速度和内存消耗。
有人可以解释一下这究竟意味着什么,最好是一个例子吗?
答案 0 :(得分:1)
我们以List<int>
为例。这是由真正的int[]
支持的,JIT将JIT编译专门针对int
类型参数的代码,以便在T
内使用List<T>
的任何代码都应该得到任何优化,好像代码是只是的整数。
将此与Java的泛型进行比较,其中唯一有效的类型参数是类类型 - 所以即使它有效写入:
// Java code!
List<Integer> integers = new ArrayList<Integer>();
integers.add(10);
int x = integers.get(0); // x = 10
在后台执行装箱和拆箱操作。等效的C#代码根本不涉及装箱。
答案 1 :(得分:0)
我认为Jon认为许多这些类型不被视为其定义类型的对象。例如; int不必被视为结构,可以直接在寄存器中处理。添加两个整数不是由重载的操作员调用处理,而是由cpu直接完成。