AOT
IL2CPP
.NET Standard
.NET Core 跨平台的
Mono 跨平台的 和 上面的一样
.NET Framework
1.Net Framework 是Net的一种实现,在此类库上我们可以使用C#,VB,F#进行程序编写,主要用于构建Windows 下的应用程序
2.有两部分组成部分:
i. 公共语言运行时(CLR)处理应用程序
ii. 基础类库(BCL)这是可重用的代码库,使用其编写进行应用程序编写
3.在执行的过程中.Net编写的代码将会编译成一种称为中间语音(IL)存储形式以DLL和EXE后缀名结尾的文件为主,当程序运行时CLR会编译转换为机器代码。
4. Net Framework 本身不是跨平台的也就是话说仅限于运行在Windows 平台,想要跨平台需要借助第三方。
CLR
Mono 使用即时 (JIT) 编译,在运行时按需编译代码。
IL2CPP 使用提前 (AOT) 编译,在运行之前编译整个应用程序。
你肯定会想 为啥unity不使用 .net core 而用 mono呢?
看下面官方的文章吧
https://mp.weixin.qq.com/s?__biz=MzkyMTM5Mjg3NQ==&mid=2247537256&idx=1&sn=ff5bc18f84141f09732d1e8f54348cff&source=41#wechat_redirect
unity编译
https://blog.csdn.net/NRatel/article/details/127219014
巨好的文章 一定要看
https://zhuanlan.zhihu.com/p/386567376
好文章
https://zhuanlan.zhihu.com/p/149326090
(顺便我们也可以很容易的理解Unity热更新方案 ILRuntime的原理了:它从dll中读取IL语言,然后直接像脚本一样解释运行)
https://www.cnblogs.com/yuanyang/p/5422351.html
IL2CPP 是 Unity 自 4.6.1p5版本 提出的一种新的 scripting backend 方式,为Unity提供了更加高效、更加便携的虚拟机,IL2CPP分为两个独立的部分:
AOT(静态编译)编译器
运行时库
其中AOT编译器将 IL(由.Net编译器输出的中间语言)转换为C++源码,而运行时库则会提供诸如 垃圾回收、线程/文件获取(独立于平台,与平台无关)、内部调用直接修改托管数据结构的原生代码 的服务与抽象。
CPU 只能执行二进制码,所有我们写的代码都需要转换成二进制码才能被 CPU 执行,高级语言转换成二进制码分为两种,一种是在运行前编译好,另一种是在运行中逐条翻译成二进制码,前者称为运行前编译即 AOT,后者称为即时编译即 JIT.
即时编译
即时编译:全称Just In Time,简称 JIT,
开发效率高:在开发周期中使用,可以动态下发和执行代码,开发测试效率高,在开发期使用 JIT 编译,可以缩短产品的开发周期。
速度慢:运行速度和执行性能则会因为运行时即时编译受到影响。
运行前编译
运行前编译: 全称Ahead of Time,简称AOT.
速度快:因为在编译的时候它们能够获取到更多的有关程序结构的信息,从而有机会对它们进行优化。
适用性差:它们编译得到的二进制代码往往是CPU相关的,在需要适配多种CPU时,可能需要编译多次。开发效率低,每次调试都需要编译.
Unity 具有两个脚本后端 Mono 和 IL2CPP (Intermediate Language To C++),它们各自使用不同的编译技术:
Mono 使用即时 (JIT) 编译,在运行时按需编译代码。
IL2CPP 使用提前 (AOT) 编译,在运行之前编译整个应用程序。
IL2CPP是如何工作的
当你使用IL2CPP开始构建时,Unity会自动执行以下步骤:
The Roslyn C# compiler compiles your application’s C# code and any required package code to .NET DLLs (managed assemblies).
Unity applies managed bytecode stripping. This step can significantly reduce the size of a built application.
The IL2CPP backend converts all managed assemblies into standard C++ code.
The C++ compiler compiles the generated C++ code and the runtime part of IL2CPP with a native platform compiler.
Unity creates either an executable file or a DLL, depending on the platform you target.
il2cpp.exe
位置
C:\Program Files\Unity\Editor\2021.3.6f1c1\Editor\Data\il2cpp\build\deploy
还有一个 libil2cpp
非常重要