5

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

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

有人可以解释一下这到底是什么意思,最好举个例子吗?

4

2 回答 2

1

让我们List<int>举个例子。这是由正版支持的int[],JIT 将专门为int类型参数 JIT 编译代码,因此任何使用inside 的代码TList<T>应该得到任何优化,就好像代码只是为整数编写的一样。

将此与 Java 的泛型进行比较,其中唯一有效的类型参数是类类型 - 所以即使它是有效的编写:

// Java code!
List<Integer> integers = new ArrayList<Integer>();
integers.add(10);
int x = integers.get(0); // x = 10

它在后台执行装箱和拆箱操作。等效的 C# 代码根本不涉及装箱。

于 2013-06-10T19:00:36.453 回答
0

我认为 Jon 提到许多这些类型不被视为其定义类型的对象。例如; int 不必被视为结构,可以直接在寄存器中处理。添加两个整数不是由重载的运算符调用处理的,而是由 cpu 直接完成的。

于 2013-06-10T11:29:01.347 回答