1
4
NET可执行文件包含MSIL(微软中间语言)字节码,类似于Java字节码。它们不是本机Intel32代码,没有安装.NET Framework就无法运行。除了MSIL之外,还包含大量的元数据。可以使用ildasm或reflector查看.NET可执行文件。 从技术上讲,它们不是解释的,而是编译为机器代码的JIT(只是及时的)。有一种方法可以将它们编译为本机代码ngen.exe实用程序。有时,JIT代码可能比NGEN更快,因为它可以进行运行时分析。 |
2
7
问题应该是什么是“真正的”可执行文件。 可执行.NET程序集存储在 Portable Executable (pe)格式,它是用于Windows中可执行文件的文件格式之一。 这是一种包装格式,告诉操作系统执行所包含的代码所需的所有信息。 从这个意义上讲,.NET可执行文件是完全“真实”的执行器。 但是,对于.NET程序集,PE格式 extended :
|
3
2
.NET exes与其他可执行文件一样,是PE文件,但它们包含附加的节以在内部包含IL。看最后一篇文章 this thread 查看更多详细信息。 |
4
2
.exe文件包含表示IL指令的字节代码。当您启动应用程序时,JIT编译器会将其编译成专门为您的处理器创建的本机代码。 因此,虽然可执行文件不包含本机代码,但执行的是本机代码。由于JIT编译器可以为您的特定处理器优化代码,因此它有可能比在任何处理器上运行生成的本机代码更快。 |
5
1
它们是字节码。理论上,字节代码可以比本机代码快,所以不要考虑性能。 |
6
1
不,它们不是普通的可执行文件。它们包含cli标准中定义的元数据和cil(通用中间语言)指令(参见ecma-335- http://www.ecma-international.org/publications/standards/Ecma-335.htm ) 至于CIL的解释:大多数.NET版本不解释代码,而是JIT(及时)编译代码。这意味着,当一段代码在应用程序运行时第一次使用时,代码被编译为本机代码,并且从此处开始使用本机代码。但这实际上是一个实现细节,例如,据我所知,微观框架在纯解释中。 关于您在问题中的编辑: 其原因是,通过在元数据和公共指令集中对代码进行公共表示,可以更容易地以这种方式在不同语言之间进行互操作。 因为所有的语言在幕后都讲着相同的、常见的“低级”语言,所以它们能够明显地相互集成。 |
7
1
当您第一次加载.NET程序集时,字节代码(msil)被编译为本机代码(即时编译),从那时起它作为本机程序集运行。因此.NET程序集是 不 解释,但当它们第一次被抖动时,您确实会受到一点性能影响。然而,JIT的优点在于JIT编译器可以优化程序集运行的体系结构(CPU指令集等)的汇编程序,而传统的编译时编译(如C++)则不一定如此。 如果愿意,可以使用NGEN预编译.NET程序集,从而避免JIT开销。 |
8
1
是的,它们不是“真实的”。您将要创建的exes将被MSIL编码。当您运行某个执行器时,代码将由clr(公共语言运行库)转换为机器代码。 MSIL代码可以很容易地反编译。你可以使用 .NET Reflector 它是免费的。此外,你可以转换你的代码从C到VB.NET或C++等当你反编译你的exe… 你也可以尝试 Xenocode Postbuild obfuscator 它使您的exe本机32和模糊,.NET Reflector将无法解压缩您的exe,如果您使用此模糊。但是,这会让你的前男友变得更大一点。) |
9
0
不解释.NET。当一个代码实际执行时,它是一个本机代码,由于JIT,它是从MSIL编译而来的。可执行文件包含生成本机代码所需的MSIL指令。 |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
Dansih · .Net核心自定义身份验证方案 2 年前 |
lolorekkk · 面板插入。NET WinForm 2 年前 |