Unity的JIT和AOT實現


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中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM