AYE89

coding & learning

导航

Unity的JIT和AOT实现

Posted on 2017-08-23 11:09  AYE89  阅读(3150)  评论(0编辑  收藏  举报

https://myhloli.com/about-il2cpp.html

JIT方式:

Unity的跨平台技术是通过一个Mono虚拟机实现的。而这个虚拟机更新太慢,不能很好地适应众多的平台。
b54684b854d295f6a80aaa332ae17529[1]_看图王

Android下会生成:

\assets\bin\Data\Managed\           Assembly-CSharp.dll    (游戏的控制逻辑,运行时调用)

\lib\armeabi-v7a\                           libmono.so, libmain.so, libunity.so    (libmono.so会完成mono VM的功能)

 

AOT方式:

unity公司就自行研发了IL2cpp,把本来应该再mono的虚拟机上跑的中间代码转换成cpp代码,这样再把生成的cpp代码,利用c++的跨平台特性,
在各个平台上通过对各平台都有良好优化的native c++编译器编译,以获得更高的效率和更好的兼容性。
75c24f0f60fcdaed42563e926e4ce7b8_看图王

 

Android下会生成:

\assets\bin\Data\Managed\           Assembly-CSharp.dll    一般不打包进apk(游戏的控制逻辑,只作为中间文件存放,运行时不会调用)

\lib\armeabi-v7a\                           libil2cpp.so, libmain.so, libunity.so    (libil2cpp.so中包含了游戏控制的native code,和IL2CPP VM功能

上图,对libil2cpp.so反编译可见,其中包含il2cpp::vm功能。图中为注册一个控制脚本中的方法。

Managed下托管代码(比如UnityEngine.dll)也会被编译进libil2cpp.so中。