首页 新闻 会员 周边 捐助

IL代码编译成本地代码的过程是不是这样的?

0
悬赏园豆:5 [已关闭问题] 关闭于 2012-06-29 23:26

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时执行、安全性验证(例如参数数量、参数类型)

heavi的主页 heavi | 初学一级 | 园豆:195
提问于:2012-06-29 17:48
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册