.net是动态编译还是静态编译?
在C语言里面好像有这么一个设置吧,不知在.net环境(VB.NET or C#.NET)下是不是有这样的设置,或是只有一种编译。
------解决方案--------------------生成时不同的语言使用不同的编译器进行一次编译,成为IL代码。
IL代码通过JIT动态编译成为机器语言。
------解决方案--------------------记得可以设置直接编译成非托管,不过记不得怎么设了。
------解决方案--------------------visual c++.net可以
/CLR
------解决方案--------------------可以有动态和静态的说。
------解决方案--------------------大致有两种情形,动态和静态:
1. 一般情况下是JIT (Just in time)。CLR在执行方法的时候会调用一个Stub,这个Stub如过函数没有被Jit则指向JIT函数,执行则会被自动JIT,然后Patch返回地址,返回之后直接执行JIT之后的本地代码,如果已经JIT,则指向JIT后的代码
2. 如果Assembly已经被NGEN过,这种情况下方法的Stub直接指向NGEN之后的代码,这个代码已经被Prejit过,可以直接调用而无需JIT参与
------解决方案--------------------2.又叫做AOT(Ahead of time)
------解决方案--------------------ATField() zj