gpt4 book ai didi

c# - JIT 后的 .NET 代码是否与 native 代码一样执行

转载 作者:行者123 更新时间:2023-11-30 14:35:42 25 4
gpt4 key购买 nike

.NET 语言全部编译为中间语言 (MSIL)。

据我所知,在执行过程中(有时在其他阶段,我并不完全了解 -- NGEN),代码正在被 JITted(从 MSIL 编译成实际的 机器码)。

我想知道在对代码进行 JIT 处理后是否会因为代码在 CLR 上执行而产生性能“惩罚”,或者代码的行为是否与任何其他 native 代码“相同”?

最佳答案

有许多性能差异:

  1. 托管对象的自由存储是作为堆栈而不是堆(大型对象堆除外)实现的,并且比大多数 native 分配器使用的堆的开销更低。但是随后您需要为垃圾收集和压缩付费。

  2. JIT 可以内联一些 AOT 编译器必须保留为虚拟的调用(即调用其他程序集)。但是 AOT 编译器可以花更多时间寻找优化机会。

  3. 理论上,JIT 可以使用运行代码的特定 CPU 上存在的高级指令(例如 AVX)。不过,仍在等待真正充分利用它们的 JIT。

  4. AOT 编译器可以使用分析数据来控制代码内存的布局。 JIT 编译器几乎总是按照编译顺序将函数发送到内存中。

关于c# - JIT 后的 .NET 代码是否与 native 代码一样执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com