这是关于.NET。
代码(高电平:C#,vb.net - 人类可理解的)在VS和DLL编译/生成的exe这被称为IL(这也是或多或少人类可理解)。
当我们运行的第一次在机器上这个dll / exe文件时,CLR / JIT的IL转换成机器代码(二进制格式:0和1的 - 这是不是人类可以理解的)。 因此,除非在系统重新启动转换,不需要在下一次本机代码保存在内存中。
ILASM.exe可用于该DLL / EXE(IL代码)成机器代码转换和程序Ildasm.exe是另一个相对。
如果编译器生成的exe / DLL(IL),其为二进制格式,那么,什么是JIT的目的是什么? 由于代码已在二进制格式... 这是否意味着IL的二进制代码是由JIT转换成二进制机器码?
请纠正我的上述声明。
代码(高电平:C#,vb.net - 人类可理解的)在VS和DLL编译/生成的exe这被称为IL(这也是或多或少人类可理解)。
你需要IL的二进制形式,和IL的文本形式来区分-如果你打开了编译EXE或DLL文件,你不会看到的文字,所以这不是人类可读......但文字表述是一种“面向对象的汇编语言”的。 二进制表示是“为CLI机器码” -但是这不是你上运行的计算机的本机代码。
因此不需要转换下一次本机代码保存在内存中。
不,不,据我所知-它只是保留在这个过程中 ,在大多数情况下。 所以,如果你启动另一个进程,它会再次JIT的代码。
ILASM.exe可用于该DLL / EXE(IL代码)成机器代码转换和程序Ildasm.exe是另一个相对。 这是保存在内存中也? 什么是文件格式?
不,这不是真的。 ILASM发生源 IL(文本),并将其汇编成二进制 IL ......它不把它转换成机器代码。 ILDASM正好相反 - 它会转换DLL或EXE为文本IL,可以读取。
一个当将利用像ILASM工具?
我有时用ILDASM来看看IL特定编译的二进制(尽管我通常使用反射镜)。 我使用ILASM更很少 - 通常使用ILDASM来获取文本IL后,然后我在一些有趣的方式调整了它。 你可以看看我的无约束旋律项目就是一个例子,在那里我捏捏IL表示不能在C#中表示泛型约束。