Unity3D 跨平台原理
Unity3D的跨平台原理核心在于对指令集CIL(通用中间语言)的应用。
机理
首先需要知道,Unity中的Mono是基于 通用语言架构(Common Language Infrastructure,CLI)和C#的ECMA标准实现的,与微软的.NET框架有着诸多类似之处,因此分析Unity的跨平台性,本质即为分析.NET框架下C#语言从编译到运行的过程。首先抛出几个重要概念:
- CIL:通用中间语言(Common Intermediate Language),属于通用语言架构和.NET 框架的低阶编程语言,完全基于堆栈,运行在CLR上。
 - CLR:公共语言运行库,和Java虚拟机一样也是一个运行时环境,可由面向CLR的所有语言使用,是.NET Framework的主要执行引擎。CIL在CLR内的存在形式为IL(中间语言)。
 - JIT:即时编译,在程序执行时才编译代码,逐条将IL语句翻译为机器语句,然后执行。
 

机理概述:在编译.NET编程语言如C#时,源代码首先被Unity中Mono内的C#编译器编译成CIL码,经过CLR中JIT编译器将其翻译为本地代码,最终运行于操作系统上。因此Unity可在众多支持.NET框架的平台上工作。
其他
- 托管代码:在CLR中执行的代码,由多种支持.NET的语言编写而来,实质是中间代码。例如本例C#编写的代码被编译为CIL,运行于CLR中的形式为IL,故IL既是中间语言,又是托管代码
 
参考
- C#、.NET Framework、CLR的关系
 - Unity3D学习:简单梳理下Unity跨平台的机制原理
 - Unity将来时:IL2CPP是什么?
 - 托管代码与非托管代码
 - 《Unity3D脚本编程》- 陈嘉栋
 
Unity3D 跨平台原理的更多相关文章
- Unity3d跨平台原理
		
知乎的一个提问:unity3d跨平台原理 一些资料: IL IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe ...
 - Unity3d 发动机原理详细介绍
		
Unity3d 发动机原理详细介绍 www.MyException.Cn 发布于:2013-10-08 16:32:36 浏览:46次 0 Unity3d 引擎原理详细介绍 体系结构 ...
 - Java跨平台原理
		
此篇博文主要源自网络xiaozhen的天空的博客:http://xiaozhen1900.blog.163.com/blog/static/1741732572011325111945246/ 1.是 ...
 - 【转】Java跨平台原理
		
原文地址:http://www.cnblogs.com/gw811/archive/2012/09/09/2677386.html 1.是么是平台 Java是可以跨平台的编程语言,那我们首先得知道什么 ...
 - Java的跨平台原理
		
JAVA的跨平台原理 JAVA的跨平台原理 Java是一种简单易用.完全面向对象.有平台无关性.安全可靠的.主要面向Internet的开发工具.Java自从1995年正式面世以来,它的快速发展已经使整 ...
 - Java 跨平台原理
		
Java的跨平台基于编译器和虚拟机.其中,CPU处理器和操作系统的整体称为平台.编译器把源文件编译成与平台无关的基于Unicode的字节码class文件,虚拟机把该文件解释成与平台有关的机器码指令,可 ...
 - Cocos2d-x的跨平台原理
		
为了充分发挥硬件性能,手机游戏通常使用Native App开发模式,这就造成开发商要为iOS 和Android平台用户开发不同的应用,无论是产品迭代还是运行维护都非常麻烦.Cocos2d-x在iOS, ...
 - 1,java的跨平台原理
		
简单讲一下java的跨平台原理: (1)为什么跨平台: 由于各OS支持的指令集各不相同,就需要程序在不同的平台执行不同的代码 (2)JAVA是如何实现的: ava开发了适合不同的OS及不同位数的jav ...
 - Qt跨平台原理
		
Qt跨平台原理: 和java一样,针对每一种OS平台,QT都有一套对应的底层类库,而接口是完全一致的. 因此只要是在QT库上开发的程序,放在任何一种平台下都可以编译运行(前提条件是:程序中没有使用某O ...
 
随机推荐
- element ui 合计/table show-summary
			
在el-table 上面加上show-summary就可以对table的数据进行合计 但是上次出现了合计栏有的为空,有的合计不对的情况,如果出现的是空,那么说明你渲染的数据有undefine(即后台返 ...
 - java JBDC操作
			
类似:c# 里面的ado.net 增删改查,动手做Demo (当然实际企业开发很少用这种方式 ). ps:以前从一开始 搞ssm spring Boot spring Mvc 什么都懂一点.什么都 ...
 - 最精简使用MORMOT
			
MORMOT是免费开源的SDK,它封装了HTTP.SYS,这是许多人使用它的原因,让人难以想像的是它居然支持DELPHI6及以上版本. 但MORMOT本身已经被封装的很庞大,它提供许多的单元,这让人不 ...
 - jquery数组倒序
			
倒叙前:var mem = [1, 2, 3]: 倒序后:var men1=[3,2,1]: <script type="text/javascript"> $(fun ...
 - CMU Database Systems - Distributed OLTP & OLAP
			
OLTP scale-up和scale-out scale-up会有上限,无法不断up,而且相对而言,up升级会比较麻烦,所以大数据,云计算需要scale-out scale-out,就是分布式数据库 ...
 - 上传图片 展示进度条  bootstrap
			
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Bo ...
 - Java基础 三目运算符 在嵌套时,使用括号
			
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
 - tf.gather和tf.gather_nd、tf.cast、tf.greater
			
https://blog.csdn.net/Cyiano/article/details/76087747
 - Android dump命令查看某个apk是被谁安装的?
			
adb shell dumpsys package packages > packageAll.txt ORadb shell pm dump packages > package ...
 - Word模板生成PDF文件目录出现“错误!未定义书签!”的解决办法
			
通过程序读取Word文档模板生成PDF时,所有目录的页码全部变为“错误!未定义书签!”,后来经过仔细研究,发现是“域”的问题. 解决办法:全选(Crtl+A),按下Crtl+F11,再打印或者另存为P ...