是否JIT IL的二进制代码转换成二进制机器码?(Does JIT convert the bina

2019-10-20 13:25发布

这是关于.NET。

  1. 代码(高电平:C#,vb.net - 人类可理解的)在VS和DLL编译/生成的exe这被称为IL(这也是或多或少人类可理解)。

  2. 当我们运行的第一次在机器上这个dll / exe文件时,CLR / JIT的IL转换成机器代码(二进制格式:0和1的 - 这是不是人类可以理解的)。 因此,除非在系统重新启动转换,不需要在下一次本机代码保存在内存中。

  3. ILASM.exe可用于该DLL / EXE(IL代码)成机器代码转换和程序Ildasm.exe是另一个相对。

如果编译器生成的exe / DLL(IL),其为二进制格式,那么,什么是JIT的目的是什么? 由于代码已在二进制格式... 这是否意味着IL的二进制代码是由JIT转换成二进制机器码?

请纠正我的上述声明。

Answer 1:

代码(高电平: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#中表示泛型约束。



文章来源: Does JIT convert the binary code of IL into binary machine code?
标签: .net clr