x86和x64有不同的.net CLR吗?

时间:2012-03-22 04:42:44

标签: .net x86 clr native

x86和x64是否有不同的.net CLR?

decimal i = 89;
i=i++;

上面的代码是否会在x86,x64上由CLR生成不同的本机代码?

更新    如果是,那么当我在我的机器上安装visual studio时,将安装两个独立于机器位的CLR版本?它有性能吗?

1 个答案:

答案 0 :(得分:3)

是的,有一个32位和64位的特定JITter。您的代码将运行在哪一个取决于加载CLR的主机环境/进程和程序集本身。

构建程序集时,您可以选择是否定位x86,x64或“AnyCPU”。

  • AnyCPU将在32位下运行32位,在64位下运行64位。
  • 32位将在32位上以32位运行,并将在64位WOW64下运行。
  • 64位不会在32位下运行,但会在64位上以64位运行。

在引入此设施之前,还有一个“遗留”组件的案例。我相信它们的行为与32位行为相同。

请注意,如果程序集具有任何32位本机依赖项,​​那么您还应将其标记为32位,否则它将在64位环境中以64位形式加载,并且依赖项将无法加载。 / p>

要回答您更新的问题:

64位计算机将同时安装32位和64位CLR。在WOW64下运行32位程序集需要32位。 (例如,Visual Studio是32位!)

32位有时可以运行得更快,因为指针较小,因此浪费的缓存/内存较少。另一方面,64位模式有更多寄存器可供JITter使用。这取决于代码的特征。