跨平台
Intermediate Language,中间语言,面向对象的汇编语言
通过C#编译器mcs,将C#编译为IL(中间语言,byte code) 通过Mono运行时中的编译器将IL编译成对应平台的原生码
即时编译(Just in time,JIT):程序运行过程中,将CIL的byte code转译为目标平台的原生码。 提前编译(Ahead of time,AOT):程序运行之前,将.exe或.dll文件中的CIL的byte code部分转译为目标平台的原生码并且存储,程序运行中仍有部分CIL的byte code需要JIT编译。 完全静态编译(Full ahead of time,Full-AOT):程序运行前,将所有源码编译成目标平台的原生码。
Mono运行时编译器支持将IL代码转为对应平台原生码 IL可以在任何支持CLI,通用语言环境结构)中运行,IL的运行是依托于Mono运行时。
机器码被禁止映射到内存,即封存了内存的可执行权限,变相的封锁了jit编译方式
c#代码生成的IL编码,由虚拟机的JIT编译执行,其中对象无须手动释放,由GC管理
C++/C#中以不安全类型写的代码,虚拟机无法跟踪
托管代码剥离过程将分析项目中的程序集,以查找和删除未实际使用的代码。分析过程使用一组规则来确定要保留的代码和要丢弃的代码。这些规则将在构建大小(包含太多代码)与风险(删除太多代码)之间进行权衡。Managed Stripping Level 设置可用于控制删除代码的激进程度。
IL2CPP概括: