2012-03-22 90 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