C#热更
C#作为一种编译型语言。C#代码会被编译成MSIL(中间语言),IL解释成机器码,解释的过程可是是运行前也可以运行中。
JIT对IL的解释原理:JIT将IL解释为所有平台的机器码,开辟出一段内存空间,要求这段空间可读,可写,可执行,然后把解释的机器码放入,修改CPU指令指针寄存器中的地址,让CPU执行之前解释出来的机器码
IOS不允许获取具有可执行权限的内存空间,JIT要以fullAOT模式,这种模式不会在运行期间把IL直接编辑成机器码
成为了编译型语言就失去了在运行中解释的功能
lua能解释执行是因为在解释lua字节码(lua自己的命令)是使用c代码进行解释,执行的是c写出来的虚拟机。
C#也能在IOS上热更:
IL虚拟机支持完全解释执行,不过效率差了一些,具体可以参考IL Runtime热更方式
这种方式把C#代码分成需要热更的和不需要热更的,也就是c#框架层跟逻辑层,计算部分最好要放在不需要热更的框架层不进行解释执行
Unity使用c++开发引擎层,暴露C#接口给开发人员使用以提高开发效率,然后强行加个用c写的lua层,lua层调C#接口,c#再调用c++接口
热更不仅可以用lua,也可以用python,lua虚拟机不仅可以用c写,也可以用c#写

浙公网安备 33010602011771号