当前位置: 首页 > news >正文

8. Mono与IL2Cpp简介

1.c#的执行过程

2.Mono

3.IL2CPP


1.c#的执行过程

假如我们想让一个外国厨师(电脑cpu)做一道鱼香肉丝, 但cpu厨师只懂一种非常底层的机器语言, 就像一套固定的手势和简单的指令(比如:,,, 放盐3); 作为程序员, 写的c#代码就像是用中文写的菜谱

在这里插入图片描述

cpu厨师看不懂中文菜谱, 那就需要一系列的翻译和解释过程; c#代码的执行过程分为三大步: 编写 -> 编译 -> 执行

1).编写代码我们用Visual Studio, Rider等工具(IDE, 集成开发环境)写下人类可读的c#代码(中文菜谱)

2).编译代码, 编译代码分为两个小步a.编译为中间语言(il/cil)- 角色登场: c#编译器(Roslyn)- 过程: 当我们点击生成或运行时, c#编译器将写的中文菜谱(c#源代码)翻译成中间语言il或通用中间语言(cil)的东西这一步将我们的中文菜谱翻译成了通用菜谱, 但是cpu厨师还是看不懂的b.打包为程序集(Assembly)- 编译生成的il代码和相关资源会被打包成一个或多个.dll或.exe, 我们统称它们为程序集; 比喻: 将世界通用菜谱语言写成的菜谱书被打包好, 准备送给厨师
3).设备上执行现在, 打包好的通用菜谱要被送到厨房(设备), cpu厨师终于要上场, 但它还是看不懂通用菜谱, 这个时候一位至关重要的翻译官出场a.加载和JIT编译(jit compilation)- clr 可以将它想象为整个厨房的环境和总管, .net程序必须在存在clr的环境中才能执行, 这个环境就是.net运行时- jit编译器是clr的现场翻译官, 它的工作方式如下:点菜, 当程序执行到某个方法(比如鱼香肉丝), clr才会把这段方法的il代码交给jit编译器; jit编译器(现场翻译官)立刻将这段il代码编译成当前cpu平台能直接理解的原生机器码; 执行并缓存, cpu会将拿到翻译好的指令, 立刻开始执行, jit编译器将已经翻译好的机器码缓存起来b.托管执行程序在clr的管理下运行, 我们称之为托管执行; CLR这位总管在整个过程中提供了许多强大的服务- 垃圾回收 (Garbage Collection, GC): 自动帮你收拾厨房,把切完不要的菜梗、用过的油碗(不再使用的内存)清理掉,你几乎不用担心“内存泄漏”的问题- 类型安全 (Type Safety): 确保厨师不会错把糖当盐放,避免了很多低级错误- 异常处理 (Exception Handling): 万一锅着火了(程序出错), 有一套机制来处理,不会让整个厨房炸掉

在这里插入图片描述


2.Mono

Mono(虚拟机)是一个跨平台的, 开源的.net framework的实现

在这里插入图片描述

mono的方式处理il, il代码和一个包含jit即时编译器的完整运行时环境会进入我们的包

3.IL2CPP

il2cpp是unity自己开发的一套构建时的后端处理技术(il to cpp)将中间语言(il)转换为c++代码

在这里插入图片描述

il2cpp的方式处理il, 纯原生机器码 + 一个不包含编译器的精简版运行时支持库

文章转载自:

http://GWKc9QZG.Lfpdc.cn
http://3UwxpA4P.Lfpdc.cn
http://Aijl3d3k.Lfpdc.cn
http://SVrsrvfG.Lfpdc.cn
http://4J03gwfZ.Lfpdc.cn
http://AqUryroP.Lfpdc.cn
http://jFnK5nuf.Lfpdc.cn
http://83bmdV5N.Lfpdc.cn
http://4NcFtw8W.Lfpdc.cn
http://hEAx9p5O.Lfpdc.cn
http://iSl5A0VM.Lfpdc.cn
http://eRfif69O.Lfpdc.cn
http://6g7HgLir.Lfpdc.cn
http://mRzfLTzm.Lfpdc.cn
http://ebs8aq0T.Lfpdc.cn
http://eKq0yEDm.Lfpdc.cn
http://ulaghvU6.Lfpdc.cn
http://GkRuVOba.Lfpdc.cn
http://BI6cotet.Lfpdc.cn
http://wlD7eCUg.Lfpdc.cn
http://uzWVMGiW.Lfpdc.cn
http://7tTPmyb9.Lfpdc.cn
http://ooicTxVq.Lfpdc.cn
http://2Zdu50I6.Lfpdc.cn
http://SS8KkqZK.Lfpdc.cn
http://sSwMieqx.Lfpdc.cn
http://5woyuhZL.Lfpdc.cn
http://fcEeIjex.Lfpdc.cn
http://uD9L0DUL.Lfpdc.cn
http://oKawdYAV.Lfpdc.cn
http://www.dtcms.com/a/369145.html

相关文章:

  • LLM与数据工程的融合:衡石Data Agent的语义层与Agent框架设计
  • ESP-IDF串口中断接收
  • git命令解析
  • 如何从chrome中获取会话id
  • Linux/UNIX系统编程手册笔记:进程组、会话、作业控制、优先级、调度、资源
  • HTML HTML基础(2)
  • Git 同步最新代码:用 stash -> pull -> pop 安全同步更新
  • java,通过SqlSessionFactory实现动态表明的插入和查询(适用于一个版本一个表的场景)
  • 男人怕老婆:家庭幸福的密码与社会文明的缩影?
  • 基于单片机的六足机器人控制系统设计
  • watchEffect 与 watch的区别
  • 怎么获取Nano Banana的APK Key?
  • proxmox8升级到proxmox9
  • Karmada v1.15 版本发布
  • AI在目前会议直播系统中应用
  • 【C++】 priority_queue 容器模拟实现解析
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十六)windows平台运行时隐藏控制台
  • leetcode 6 Z字形变化
  • 《失落之魂》M站评分仅40?国产动作类游戏究竟何去何从?
  • Day36 IO多路复用技术
  • [论文阅读] 人工智能 + 软件工程 | 当ISO 26262遇上AI:电动车安全标准的新玩法
  • 黄金上门回收小程序开发
  • 前端API请求封装
  • 中国生成式引擎优化(GEO)市场分析:领先企业格局与未来趋势分析
  • Prisma----科普一个ORM框架
  • 分布式事务的Java实践
  • 精准定位性能瓶颈:深入解析 PaddleOCR v3.2 全新 Benchmark 功能
  • The Algorithmic Foundations of Differential Privacy - 3(2)
  • 亚马逊关键词选择:从人工试错到智能闭环的进化之路
  • WIN11控制面板中丢失BitLocker,找回WIN10控制面板中的BitLocker驱动器加密设置