IL代码编译成本地代码的过程:CLR的JIT编译器的职责
例子:
static void main(){
Console.WriteLine("Hello");
Console.WriteLine("GoodBye");
}
过程分析:
JITCompiler函数执行过程{
1、在main函数执行前检查main方法代码引用的所有类型,找到实现Console.WriteLine的程序集的元数据
2、根据元数据分配内存,元数据的每一个方法都对应一个记录项(Entry),例如包含Console.WriteLine方法的记录项
3、JITCompiler从元数据中查找调用方法的IL代码并编译成本地代码。本地代码保存到动态内存中
4、找到刚才被调用方法的记录项的地址,让他直接指向刚才编译好的本地代码的内存地址
5、JITCompiler跳转到刚才编译好的内存块中的代码,然后执行。执行后返回到Main中代码继续执行。
}
当第二次执行WriteLine方法时,会直接跳转到内存块的代码,完全跳过JITCompiler函数。
其他功能:代码的优化也在JIT时执行、安全性验证(例如参数数量、参数类型)