Unity中Mono和IL2CPP

  • Post author:
  • Post category:其他


Mono虚拟机:

Mono作为.Net平台的开源项目,支持Linux,Windows,Mac和Android。所以基于Mono开发的应用程序都是可以跨平台发布。其跨平台的特性也是Unity选择Mono的原因。

编译流程:

Unity编译打包时,使用C#编写的脚本会通过Mono的C#编译器打包成IL(中间语言),然后在Mono的虚拟机中运行。

IL的存在是为了兼容不同平台,因为在不同指令集在平台上执行同样的程序的机器语言并不相同,若打包的时候直接将程序翻译成机器语言,则出的包只能在指定平台运行,所以打包的时候先编译成IL,在不同的平台上使用Mono虚拟机(JIT)将IL翻译成对应平台的机器语言。

优点:

  • 构建速度快

  • 支持运行时代码执行

缺点:

  • 多平台移植麻烦。

  • 受限于Mono版本。

IL2CPP:

因为Mono官方的虚拟机并不能满足Unity多平台的需求,所以后来引入了IL2CPP。

IL2CPP主要由两部分组成:

  1. AOT:将IL转换成C++源码,然后通过不同平台的C++编译器编译,实现多平台兼容。

  1. 运行时库(libli2cpp):支持IL2CPP虚拟机运行,可以提供GC,线程获取,文件获取,内部调用直接修改托管堆数据结构的。

优点:

  • 运行效率快。

  • 方便多平台移植。

  • 可以在相应的平台使用C++编译器对编译器代码进行优化。

缺点:

  • 相对于Mono的构建速度慢。

  • 只支持AOT编译。



版权声明:本文为m0_60718189原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。