x86 / x64中的编译与MSIL之间的关系

时间:2019-01-24 22:38:45

标签: compilation x86 64-bit jit cil

所以我知道,如果为任何CPU编译,都会得到MSIL输出。如果编译为x86,则会得到x86输出。

我对过程的理解如下

.NET Code -> Compiler -> MSIL -> JIT compiled in CLR -> Native Instruction

我的问题是,如果您在x86 / x64中进行编译,是否跳过上面的MSIL -> JIT compiled in CLR步骤?还是我的理解力不强?

1 个答案:

答案 0 :(得分:1)

您的理解不太正确。如果程序集仅由托管代码组成,则无论编译器设置(AnyCPU / x86 / x64)如何,它都会始终被编译为纯MSIL,因此,即使您将其编译为x86,您仍然可以获得MSIL

如果您编译为AnyCPU,则程序集可以以32位或64位进程的身份运行或加载到其中,而如果将其编译为x86,则只能以32位或64位进程运行(或加载)。同样,当编译为x64时,它只能作为64位进程运行(或加载到64位进程中)。两种情况下都使用相同的MSIL,并且JIT将MSIL编译为所需的32/64位本机代码。