n_enrai49 Asked:2020-07-28 22:49:17 +0800 CST2020-07-28 22:49:17 +0800 CST 2020-07-28 22:49:17 +0800 CST 目标码和字节码有什么区别 772 怎么看都看不懂,如果.Net中使用cil代码,那么是字节码还是对象,如果是对象,那么就有这样的链接过程,还是和字节码一起存在 c# 1 个回答 Voted Best Answer MSDN.WhiteKnight 2020-07-30T14:58:23+08:002020-07-30T14:58:23+08:00 因此,“目标代码”作为一种单独的代码是不存在的。有一个目标文件的概念——这些是用C/C++/ASM等语言编译代码得到的文件\u200b\u200b编译成机器码。例如,对于 Visual C++,这些文件具有.obj扩展名。但是这些文件包含目标体系结构的正常机器代码,唯一的区别是其中的一些函数和变量的地址被标记为未定义,并且以后必须由链接器替换为真实地址。 但是.NET 不使用真正的目标文件。.netmodule 文件虽然与它们相似,但在结构上完全不同(它们几乎是一个成熟的 PE 文件,与链接程序集的不同之处仅在于清单中没有 .assembly 部分)。它们可以被提供给 Visual C++ 链接器(包括与真正的 .obj 文件一起!然后生成的程序集将被混合,即包含 CIL 字节码和本机代码),但这仅适用于特殊情况。C#/VB 应用程序的传统构建不使用链接。编译器的输出立即生成一个只包含 CIL 字节码的可执行文件。
因此,“目标代码”作为一种单独的代码是不存在的。有一个目标文件的概念——这些是用C/C++/ASM等语言编译代码得到的文件\u200b\u200b编译成机器码。例如,对于 Visual C++,这些文件具有.obj扩展名。但是这些文件包含目标体系结构的正常机器代码,唯一的区别是其中的一些函数和变量的地址被标记为未定义,并且以后必须由链接器替换为真实地址。
但是.NET 不使用真正的目标文件。.netmodule 文件虽然与它们相似,但在结构上完全不同(它们几乎是一个成熟的 PE 文件,与链接程序集的不同之处仅在于清单中没有 .assembly 部分)。它们可以被提供给 Visual C++ 链接器(包括与真正的 .obj 文件一起!然后生成的程序集将被混合,即包含 CIL 字节码和本机代码),但这仅适用于特殊情况。C#/VB 应用程序的传统构建不使用链接。编译器的输出立即生成一个只包含 CIL 字节码的可执行文件。