.Net 7 的 AOT 和 CLR有什么区别?

3周前 (11-19 17:56)阅读1回复0
王富贵
王富贵
  • 管理员
  • 注册排名5
  • 经验值70540
  • 级别管理员
  • 主题14108
  • 回复0
楼主

楔子:

AOT和 CLR的区别是什么呢?

大部门人必定会说,一个编译成当地机器码(Native Code),一个是JIT立即编译的成果。

那么说,其实也对,但是不详细。详细应该怎么看呢?

AOT

AOT现实上是为了静态编译做的一个变体,不断在不断的轮回进化,它并非.Net Core之后才有的,之前的.Net FrameWork也是有的。

在windows上,AOT是通过ilc.exe来加载托管的DLL,然后把那个DLL编译成.Obj文件。尔后通过运行时也就是CLR来链接到那个.Obj文件,生成你最初看到的阿谁超大的Exe文件。

CLR

CLR的编译过程其实各人都清晰,详细如下:

源码 -》Rosyln(编译成托管DLL) -》CLR(加载DLL,而且挪用RyuJit) -》RyuJit(编译成机器码)

区别

因为RyuJit是个立即的编译器,也就说你启动一个.Net法式之后,法式里面需要运行的数据就会加载到内存里面。若是你把那个法式给关掉了,内存就会被肃清,之前的数据完全不存在。所以叫做立即编译。

而AOT则差别,它会保留编译的成果,然后在挪用的时候停止成果的跳转。

留意了,AOT同样有CLR和GC,只不外它的CLR是通过Hostfxr来停止宿主挪用的,而它的GC则是通过.Obj文件链接编译到了Exe里面。

你同样的反编译它,仍然能够看到托管的代码。

结尾:

总体来说,AOT构成了一个独立的编译系统,有区别与目前的.Net 7 CLR 。

有人说微软以后可能会用AOT编译手艺代替CLR,以微软的一贯尿性,仍是极有可能的。

到时候各人,可能又要使劲的进修啦。

0
回帖

.Net 7 的 AOT 和 CLR有什么区别? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息