繁体   English   中英

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

[英]How does the JIT Compiler treat value types?

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

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

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

我们以List<int>为例。 这是一个真正的支持int[]和JIT将特别JIT编译的代码, int ,以便使用任何代码类型参数TList<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM