【dotnet】Unity IL2CPP Mono

背景

C#或者VB这样遵循CLI规范的高级语言,被先被各自的编译器编译成中间语言:IL(还有CIL是.Net平台下的IL标准),等到需要真正执行的时候,这些IL会被加载到运行时库,也就是VM中,由VM动态的编译将CIL转译为目标平台的原生码运行。

对IL进行处理与执行两种方式分别是Mono、和IL2CPP

Mono

使用Mono的时候,脚本的编译(生成IL)运行(vm)如下图所示:
【dotnet】Unity IL2CPP Mono_第1张图片
简单的来说,3大脚本被编译成IL,在游戏运行的时候,IL和项目里其他第三方兼容的DLL一起,放入Mono VM虚拟机,由虚拟机解析成机器码,并且执行。

IL2CPP

IL2CPP 是 Unity 自 4.6.1p5版本 提出的一种新的 scripting backend 方式,为Unity提供了更加高效、更加便携的虚拟机

在得到中间语言IL后,使用IL2CPP()将他们重新变回C++代码,然后再由各个平台的C++编译器直接编译成能执行的原生汇编代码。

IL2CPP主要由两部分组成

1.AOT静态编译编译器(il2cpp.exe)

2.运行时库(libil2cpp)

其中AOTIL转换为C++源码,再交给各平台的C++编译器进行编译,达到平台兼容的目的;运行时库则会提供诸如垃圾回收、线程/文件获取、内部调用直接修改托管数据结构的原生代的服务与抽象。

【dotnet】Unity IL2CPP Mono_第2张图片

你可能感兴趣的:(Unity3D,c#,unity,开发语言)