2013-03-27 35 views
0

在64位CPU上執行32位程序時,我們是否可以假設底層硬件將在內存和CPU寄存器中使用32位值來存儲整數?32位程序實際上是否在64位操作系統上使用更多內存?

鑑於這些設置:

  • 英特爾酷睿i5 +的Windows 32位+ 32位應用程序
  • 英特爾酷睿i5 +的Windows 64位+ 32位應用程序

請解釋每個設置的缺點。如果使用第二個函數會降低效率,因爲CPU需要額外的工作來忽略暫停寄存器的值?

回答

2

當x86_64處理器執行32位代碼時,它將在i686模式下有效運行。這全部通過硬件來實現,因此不會影響性能。

無論操作系統是32位還是64位,用戶空間32位程序都將以「32位模式」執行,因此行爲應該是相同的。

唯一的潛在缺陷是程序可能需要動態鏈接到64位操作系統默認未安裝的一些32位庫。這種情況在Linux中更爲常見,因爲程序動態鏈接到外部庫的情況更爲常見;在Windows上我能想到的唯一例子是,如果程序需要Visual C++運行時庫,那麼你將不得不安裝32位版本(可能與64位版本一起,如果另一個程序需要的話)。所以簡而言之,你可能不得不安裝64位設置的更多東西。

另外,實際的操作系統可能會消耗更多的內存在64位設置,但32位系統的一個缺點是,您的整個系統內存大小限制爲4GB(或由於映射某些內存空間實際約3.5 GB到硬件)。

+0

那32位模式,是否比較慢? I.E:以64位重新編譯程序會使其更快?它應該需要更多的記憶,但我想知道速度如何受到影響。如果它是相同的,那麼如果你有足夠的內存,爲什麼還要花費64位來構建? – Aki 2013-03-28 08:14:20

+1

64位模式有更多的寄存器可用,因此編譯器可以發出更高效的代碼。對於大於32位的數字,任何操作在64位模式下都會更有效。這可能會也可能不是很重要,這取決於計劃以及處理它的次數。 – Rodney 2013-03-28 12:41:06

0
+0

我不想知道你可以訪問多少,我知道你只能默認使用32位指針(我猜沒有bigmem)。我只是想知道,當你把一個整數寫入內存(mov)時,你最終以某種方式向存儲器寫入一個64位值(因爲CPU可能會更快),如果不是這樣,多少個數量級32位操作會更慢(仍然需要mov)。 – Aki 2013-03-28 08:12:27

相關問題