2012-10-17 65 views
0

我剛剛得到一臺新的64位計算機,我仍試圖瞭解32位和64位之間的差異。我瞭解使用64位依賴項構建的應用程序只能運行在64位上,但使用32位依賴項構建的應用程序可以在32位和64位系統上運行。32位/ 64位編譯和應用速度

但是,還有其他的區別嗎?我知道一些程序有兩種不同的windows版本可供下載,一種是64位,一種是32位。爲什麼他們提供兩種不同的類型?編譯64位系統上運行的程序時,速度是否會提高?

+0

將代碼移植到64位系統。優點和缺點 - http://www.viva64.com/en/l/0003/ – 2012-10-18 05:14:59

回答

1

除了速度,一些程序沒有選擇。他們需要準確地匹配主機操作系統的位數。

一個很好的例子是安裝shell擴展的TortoiseSVN。外殼擴展是DLL加載到其他進程。所以如果TortoiseSVN想提供一個外殼擴展,它必須在x64系統上提供一個64位的DLL。

驅動程序是第二個例子。

說到速度,當然是有區別的。這很大程度上取決於程序的功能。如果一個程序不要求高性能,提供x64可執行文件不會有幫助,並且對於兩個開發人員來說都是浪費時間,就像用戶一樣。

這裏是什麼原因導致的情況下,32位在64位操作系統的性能差異:

  1. 因爲模式開關
  2. 多個寄存器,更高的代碼大小的高等內核通話費用:對於計算密集這個程序大大有利於原生64位應用程序。對於其他類型的應用程序或商業風格的Web應用程序,更大的代碼和指針大小可能會導致淨損失(因此比64位慢32位!)
  3. 訪問超過3GB的內存。這顯然在2012年很少發揮作用。想想數據庫,Photoshop,...
+0

謝謝你,很好地回答了問題。 – LucasS

+0

這個答案在Windows上是正確的,但在OSX上不是這樣。32位應用程序在64位OSX上運行良好,並且每個應用程序都爲64位(具體來說,32位dyld共享緩存將不會被加載,節省> 100MB的IO和內存)顯着優勢 –

+0

Plus Apple改進了Objective-C運行時,他們將它設置爲64位,添加了一些功能,如果他們不得不擔心32位向後兼容性,這些功能是不可行的。 – echristopherson

0

速度增加取決於應用程序的功能,正如usr所說。但從根本上來說,64位CPU能夠在相同的時間內處理兩倍於32位數據的數據;但是這樣做的機器指令是針對64位處理器的,因此必須重新編譯現有的本機程序(至少)以顯示其優點。

在x86_64的情況下,內存指針現在也是64位而不是32位,這意味着程序可以處理更多的內存。但是,代碼在磁盤和內存中所佔空間大約是其兩倍。如果你在一個內存不足的64位系統上,交換可能會更糟糕。

+0

雖然這是事實,但這很具誤導性。它們處理兩倍的位數,但不是兩倍的值。在單個整數需要超過32位來表示的情況下,操作將是(所有其他部分相同)加速,然後32位機器將顯着減速,而64位則不會。 –

+0

(當然,你也可以同時處理兩個或更多的32位數字,但這與64位處理器無關。這與MMX/SSE [n]/Altivec相關) –

+0

我正在考慮更多像複製超過32位內存的東西。但現在我想到了,這可能是用DMA或其他方法完成的;我不確定這些日子公交車寬度如何影響。 – echristopherson

0

大多數語言的性能大致相同。

去64位的主要原因是可尋址內存。 A32位進程只能訪問2 GB的數據,但64位進程可以訪問18個字節的字節數(這比您可以放入機器的RAM數量多)。