厦门市建设工程造价协会官方网站,做美食介绍的网站,长沙网站开发制作,南通市住房和城乡建设局网站楔子#xff1a;AOT和 CLR的区别是什么呢#xff1f;大部分人肯定会说#xff0c;一个编译成本地机器码#xff08;Native Code#xff09;#xff0c;一个是JIT即时编译的结果。这么说#xff0c;其实也对#xff0c;但是不具体。具体应该怎么看呢#xff1f;AOTAOT实…楔子AOT和 CLR的区别是什么呢大部分人肯定会说一个编译成本地机器码Native Code一个是JIT即时编译的结果。这么说其实也对但是不具体。具体应该怎么看呢AOTAOT实际上是为了静态编译做的一个变体一直在不停的循环进化它并不是.Net Core之后才有的之前的.Net FrameWork也是有的。在windows上AOT是通过ilc.exe来加载托管的DLL然后把这个DLL编译成.Obj文件。此后通过运行时也就是CLR来链接到这个.Obj文件生成你最后看到的那个超大的Exe文件。CLRCLR的编译过程其实大家都清楚具体如下源码 -》Rosyln(编译成托管DLL) -》CLR(加载DLL并且调用RyuJit) -》RyuJit(编译成机器码)区别因为RyuJit是个即时的编译器也就说你启动一个.Net程序之后程序里面需要运行的数据就会加载到内存里面。如果你把这个程序给关掉了内存就会被清除之前的数据完全不存在。所以叫做即时编译。而AOT则不同它会保存编译的结果然后在调用的时候进行结果的跳转。注意了AOT同样有CLR和GC只不过它的CLR是通过Hostfxr来进行宿主调用的而它的GC则是通过.Obj文件链接编译到了Exe里面。你同样的反编译它依然可以看到托管的代码。结尾总体来说AOT形成了一个独立的编译体系有区别与目前的.Net 7 CLR 。有人说微软以后可能会用AOT编译技术取代CLR以微软的一贯尿性还是极有可能的。到时候大家可能又要使劲的学习啦。