JIT编译器如何处理值类型?

时间:2013-06-10 08:32:27

标签: c# jit

我正在阅读Jon Skeet的 C#。引自第三章:

  

JIT可以以特别聪明的方式处理价值类型   在许多情况下设法消除装箱和拆箱。在一些   在这两种情况下,这可以对性能产生巨大影响   速度和内存消耗。

有人可以解释一下这究竟意味着什么,最好是一个例子吗?

2 个答案:

答案 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直接完成。