• 一些名词 需要注意


    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
    非常重要

  • 相关阅读:
    Tomcat服务部署、优化
    【笑小枫的SpringBoot系列】【十七】SpringBoot文件上传下载
    小米手机 MIUI 国际版/EU 刷机教程
    spark DStream从不同数据源采集数据(RDD 队列、文件、diy 采集器、kafka)(scala 编程)
    电子眼与无人机在城市安防中的协同应用研究
    深入理解C++内存管理
    GitHub的基本使用方法
    Maven进阶-依赖管理
    主存储器与CPU的连接
    实习项目遇到的bug
  • 原文地址:https://blog.csdn.net/qq_38913715/article/details/127413755