zl程序教程

您现在的位置是:首页 >  后端

当前栏目

.Net 7 的 R2R,Crossgen2是什么?

Net 什么
2023-06-13 09:16:59 时间

楔子

来下这些概念

R22,Crossgen2这两个东西,跟前面讲的AOT和CLR有异曲同工之妙,到底什么呢?本篇来看下。

R2R

R2R(ReadyToRun),是一种结合了AOT和CLR编译模式,取其优点,抛其缺点的一种编译方式。

具体的呢,R2R包含了本地机器码编译(AOT)和即时编译(JIT),R2R把一些函数编译的最佳结果存储在DLL或者Exe里面,下次直接进行调用。而没有被编译的函数,则调用RyuJit进行编译,视乎情况而定是否保存结果。这样就导致了,R2R的特殊编译模式。而AOT的缺点比如:需要完全匹配的编译设置,放弃许多优化,并且在跨模块通用虚拟方法实现存在麻烦的情况下得以通过JIT即时来解决。而JIT的缺点,比如第一次启动较慢,无论什么函数都要来一遍即时编译等等都得以通过AOT解决。

两相互补,完美配合,应该是微软的初衷。

Crossgen2

Crossgen2 生成包含 CoreCLR 运行时的代码和数据结构的 ReadyToRun 模块.

简单点,这个工具就是生成R2R格式的文件,以供CLR按照既定的格式进行运行和编译。

而AOT的编译器ILC,则是与crossgen2共享代码库的

终章

ILC和Crossgen2是两个工具,分别生成AOT目标文件和R2R格式文件。