kitlau
kitlau

kitlau's blog

.NET Framework


.NET 是如何编译的?如何阅读中间语言?

C#编译过程分为源代码转化为CIL再转化为Native code的三个阶段,其中CIL编译器负责静态编译生成包含局部变量初始化(.locals init)、栈深度声明(.maxstack)和操作码(如nop、ldarg、mul、add、stloc、ret)的中间代码,JIT编译器在运行时将CIL转换为处理器可执行的Native code。CIL通过操作码栈操作实现逻辑,如ldarg加载参数、mul/add进行算术运算、stloc存储局部变量,其中nop用于调试断点,br.s实现分支跳转。JIT编译虽带来性能开销但实现跨平台兼容,Native code难以直接阅读可通过ngen工具处理。学习IL有助于理解代码底层行为,对比操作性能差异,其中隐藏变量(如V_1)的出现与返回值拷贝机制相关,managed模式确保CLR元数据完整性,hidebysig控制方法重载隐藏逻辑。编译过程通过分层转换实现代码移植性与执行效率的平衡。--Qwen3

.NET performance optimization C# Compilation Intermediate Language JIT Compiler .NET Framework

  • 1