[英]How does the JIT Compiler treat value types?
我正在Jon Skeet深入阅读C# 。 引自第三章:
JIT可以以一种特别聪明的方式处理价值类型,在许多情况下设法消除装箱和拆箱。 在某些情况下,这可以在速度和内存消耗方面对性能产生巨大影响。
有人可以解释这究竟意味着什么,最好是一个例子吗?
我们以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#代码根本不涉及装箱。
我认为Jon认为许多这些类型不被视为其定义类型的对象。 例如; int不必被视为结构,可以直接在寄存器中处理。 添加两个整数不是由重载的操作员调用处理,而是由cpu直接完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.