【发布时间】:2011-07-10 22:17:05
【问题描述】:
我注意到在 VS 中编译 C# 代码时,通常有针对 32/64 位系统进行编译的选项,也有针对任何 cpu 进行编译的选项。
这两个选项有什么区别?选择任何 CPU 是否只编译为中间字节码,而第一个选项编译为机器码(这听起来不太可能)?还是别的什么?
【问题讨论】:
标签: .net assemblies 64-bit 32bit-64bit anycpu
我注意到在 VS 中编译 C# 代码时,通常有针对 32/64 位系统进行编译的选项,也有针对任何 cpu 进行编译的选项。
这两个选项有什么区别?选择任何 CPU 是否只编译为中间字节码,而第一个选项编译为机器码(这听起来不太可能)?还是别的什么?
【问题讨论】:
标签: .net assemblies 64-bit 32bit-64bit anycpu
任何 CPU:作为 32 位进程运行,可以加载 任何 CPU 和 x86 程序集,将获得 @987654323 @ 如果它尝试加载 x64 程序集。
x86:与任何 CPU 相同。
x64:BadImageFormatException 始终。
任何 CPU:作为 64 位进程运行,可以加载 任何 CPU 和 x64 程序集,将获得 @987654325 @ 如果它尝试加载 x86 程序集。
x86:作为 32 位进程运行,可以加载 任何 CPU 和 x86 程序集,将获得 BadImageFormatException如果它尝试加载 x64 程序集。
x64:与任何 CPU 相同。
JIT 编译器根据此标志生成与请求的目标兼容的汇编代码。
【讨论】:
x86 - 您的软件将始终在 32 位模式下运行,无论是在 32 位系统还是 64 位系统上。
x64 - 您的软件将始终在 64 位模式下运行,将在 64 位系统上运行,但不会在 32 位系统上运行。
任何 CPU - 您的软件将根据您的操作系统运行。如果您有 32 位操作系统,您的代码将在 32 位模式下运行,如果您有 64 位操作系统,您的代码将在 64 位模式下运行。
【讨论】: