有代码:
在Main方法首次执行之前,会执行这样一个过程:
1.首先检测Main引用的所有类型(这里引用了Console这个静态类),并且在其引用类(Console)中找到其元数据调用的方法(WriteLine)
2.获取该方法的IL(Intermediate Language:中间语言)
3.分配其所需要用的内存块
使用.NET框架提供的编译器可以直接将源程序编译为.exe OR .dll exe文件可通过ILDasm反编译为IL代码,有兴趣的小伙伴可以去看看什么是中间语言(例如装箱拆箱的详细过程等).
JITCompiler(即时编译器)为CLR(公共语言运行时)的一个组件.
static void Main(){
Console.WriteLine("Hello,World");
}
在Main方法首次执行之前,会执行这样一个过程:
1.首先检测Main引用的所有类型(这里引用了Console这个静态类),并且在其引用类(Console)中找到其元数据调用的方法(WriteLine)
2.获取该方法的IL(Intermediate Language:中间语言)
3.分配其所需要用的内存块
4.将IL编译为可识别的CPU(机器语言)指令并分配到开辟的内存块中
JITCompiler(just in time Compiler:即时编译器)被当方法调用,它此时已经知道需要调用哪一个类型的哪一个方法(Console类型的WriteLine方法),并验证IL代码的正确性(检测语法错误等),JITCompiler会返回到Main,且Main正常执行,此刻已经完成了整个Main的编译.(以上省略了一些有点绕的小细节)
当Microsoft Visual Studio重新运行时,首次执行Main则同上.
使用.NET框架提供的编译器可以直接将源程序编译为.exe OR .dll exe文件可通过ILDasm反编译为IL代码,有兴趣的小伙伴可以去看看什么是中间语言(例如装箱拆箱的详细过程等).
JITCompiler(即时编译器)为CLR(公共语言运行时)的一个组件.