2012-03-22 93 views
0

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

decimal i = 89; 
i=i++; 

上面的代码在x86,x64上有不同的CLR生成的本机代码吗?

更新: 如果是,那么当我在我的机器上安装visual studio将安装独立于机器位的CLR版本?有没有与性能做点什么?

回答

3

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

当您构建您的程序集时,您可以选择它是否将目标为x86,x64或“AnyCPU”。

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

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

请注意,如果您的程序集有任何32位本地依赖项,那么您应该将其标记为32位,否则它将在64位环境中加载为64位,并且依赖项将无法加载。

要回答你的问题的更新:

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

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

+0

当我在我的机器上安装visual studio会安装独立于机器位的CLR版本?有没有与性能做点什么? – Dhananjay 2012-03-22 05:00:08

+1

@dnkulkarni:我更新了你的问题的答案 – porges 2012-03-22 05:04:57

+0

真的很棒的答案。感谢这一点。几乎没有问题出现> 1.您说“64位机器将安装32位和64位CLR”。 Qst - 何时和谁安装它?你必须有良好的信息源链接...请分享。 – Dhananjay 2012-03-22 05:17:13