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 ...
随机推荐
- javascript根据两点和底角,计算等腰三角形的顶点坐标
参考图: 代码如下: var x1 = 0; var y1 = 100; var x2 = -100; var y2 = 0; var angle = 30; var PI = Math.PI; // ...
- Uncaught ReferenceError: Invalid left-hand side in assignment
Uncaught ReferenceError: Invalid left-hand side in assignment 今天在对个人资料页面增加当浏览别的页面之后第二次访问当前页面,之前填写的内容 ...
- (9)Go指针
区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 任何程序数据载入内存后,在内存 ...
- semantic ui要装什么才能使用
作者:呆呆笨笨链接:https://www.zhihu.com/question/32233356/answer/196799506来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- openstack重设虚拟机实例密码
目录结构: 引出 采用 nova get-password 方式 采用 libvirt-set-admin-password 采用 nova rebuild instance 的方式 采用 cloud ...
- ERROR: relation "pg_buffercache" does not exist
创建pg_buffercache后,查询时报错: postgres=# create extension pg_buffercache; postgres=# select * from pg_buf ...
- opencv yuvNV21转RGB
void yuv420Torgb() { FILE *fp = fopen("D:\\1.yuv","rb"); ; ; uchar *yuvdata = / ...
- Docker CentOS / Ubuntu容器开启 SSH 服务
Docker CentOS / Ubuntu容器开启 SSH 服务 在CentOS容器内执行 yum install passwd openssl openssh-server -y # Ubuntu ...
- oracle 应用程序调用存储函数
package com.founder.ec.common.lucene; import java.sql.CallableStatement; import java.sql.Connection; ...
- 【SSH进阶之路】Hibernate映射——多对多关联映射(八)
上篇博文[SSH进阶之路]Hibernate映射——一对多关联映射(七),我们介绍了一对多关联映射,它是多对多关联映射的基础. 多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接 ...