我不明白32位和64位是什麼意思。人們似乎認爲64位電腦運行速度更快 - 但爲什麼?這是否意味着有64位整數而不是32位?如果是這樣的話,有沒有辦法編寫一個程序來確定我們是否在32位或64位機器上?如何以編程方式檢測64位或32位機器?
回答
在64位機器上指針是8個字節(64位)。在32位機器上,它們是4個字節(32位)。因此,我們可以通過我們所處理的是一個指針的大小判斷,這是最簡單的形式:
#define IS_64BIT (sizeof(void *) == 8)
唯一的缺點是,在32位模式下的64位計算機將運行32位寄存器。當然,對於所有意圖和目的來說,這並不重要,64位計算機上的32位操作系統將是32位計算機。
64位計算機本身運行速度並不快。它只能支持更高的精度(更大的整數,更精確的浮點數)。
在一些極少數情況下,庫可能會將兩個32位數字卡入64位以執行大量並行操作,可能導致潛在的高達2倍的加速。這可能發生在一些高度優化的科學/數字圖書館,或者在特殊的應用程序中(出於某種原因)在非常低的水平上進行了高度優化。例如,一些多媒體軟件。應該指出的是,即使在32位模式下,這種應用程序也可以做到這一點,但選擇不這樣做;他們僅僅爲了並行性而去掉精確度(他們可能不需要)。
顯示更快性能(可能是<提高10%)的操作系統基準測試不一定與64位相關的優化有關。 64位體系結構可能與例如程序可能注意到的更多寄存器或高級功能相關[引用:http://www.tuxradar.com/content/ubuntu-904-32-bit-vs-64-bit-benchmarks],這可能是性能差異(以及其他變量)的原因。
如何確定CPU是32位還是64位取決於您使用的操作系統。例如在Linux上,您可以撥打uname -a
,但可能有更好的方法。如果您使用的是C/C++,請參閱其他答案,以便在程序中確定它。
由於地址空間較大,我們不要忘記更多的物理內存。 – 2011-05-08 15:12:20
64位操作系統運行速度比32位更快... http://64-bit-computers.com/windows-vista-32-bit-vs-64-bit-benchmark.html – 2011-05-08 15:13:50
@Oskar它可以但必然。這取決於你正在運行什麼類型的操作。在某些情況下,它可能會變慢,並顯示在你發佈的內容中。 – Davy8 2011-05-08 15:16:40
你在這裏問的其實有幾個不同的東西。
首先是CPU。大多數現代CPU(在過去的5年內)將支持64位。
現在只是因爲CPU支持它並不意味着操作系統支持它,這就是你擁有64位操作系統或32位操作系統的地方(32位也被稱爲x86,在技術上有很小的差異x86指的是CPU指令集,但對於大多數常見用途,x86和32位可互換)
即使操作系統支持它,也不表示您正在運行的特定程序支持64位。大多數(如果不是全部的話)64位操作系統的功能是它們具有32位仿真模式,因此您仍然可以運行32位程序。
現在對於如何確定您正在運行哪種架構的問題,最可靠的方法是通過一些API調用詢問操作系統。
至於爲什麼64位有時被認爲更快,這是因爲對於32位只能尋址4GB內存,而對於64位,地址空間強加的限制要高得多(如約4高出十億倍),限制因素是硬件不佔地空間。至於何時以及爲什麼更多內存更快,這完全是一個單獨的主題。
64位機器運行速度不如32位機器,除非在64位數學運算或需要超過4 GB RAM的情況下。
64位AMD(後來英特爾)的機器,因爲當AMD公司設計了新的指令集,他們增加了更多的CPU寄存器並取得上證所數學默認的運行速度比32位x86的機器快。
32位x86系統可能會浪費大量CPU時間在RAM中推送數據,而x86_64系統可以將該數據存儲在CPU寄存器中。寄存器比一級CPU高速緩存要快得多。擁有更多寄存器還可以節省CPU指令,否則這些指令需要將寄存器的舊值存儲在RAM中,從RAM加載不同的值,然後從RAM中加載原始值。
在一些尤其是寄存器匱乏的情況下,額外的寄存器可以獲得程序的30%的速度。好處通常比這少得多。
假設SSE2的速度有很多好處。在32位CPU中,SSE指令可能存在也可能不存在,因此要使用它們,軟件需要有笨拙的測試代碼和兩個(或更多)實現數學函數。大多數軟件都不太在乎,所以它從來不會讓人煩惱,總是從486天開始回落到x87 FPU數學。 64位CPU使SSE2成爲指令集的必需部分,因此所有x86_64程序都可以自由地假定它存在並在所有情況下都使用它。
- 1. 32或64位機器
- 2. 如何以編程方式在32位或64位環境中啓動程序?
- 3. 任何方式來檢測QT Creator.pro文件中的64位和32位機器?
- 4. 如何檢測VC++代碼中的JRE位(32位或64位)
- 5. 64位機器上的SQL Server 2012 32位或64位?
- 6. 如何以編程方式檢測DLL是在.NET中編譯爲32位還是64位?
- 7. 如何使用NSIS腳本檢測Windows 32位或64位?
- 8. 如何檢測Flex中的32位或64位操作系統?
- 9. 如何以編程方式確定特定進程是32位還是64位
- 10. 如何在64位機器上測試32位SSIS包?
- 11. 如何檢查IIS是否處於32位或64位模式
- 12. 如何檢測Cocoa應用程序是32位還是64位?
- 13. InnoSetup:檢測如果Java是32位或64位
- 14. 在64位機器上編譯32位matlab應用程序(C++)
- 15. 如何在64位系統上以32位模式編譯openSSL?
- 16. 64位機器上的32位或64位虛擬機速度更快(vmware)
- 17. MySQL 32位或64位 - Apache 32位Windows 64位?
- 18. asp.net中的64位和32位機器
- 19. 在64位機器上生成32位
- 20. 交叉編譯:檢查是否可以在64位機器上構建32位
- 21. SharePoint 64位或32位
- 22. 如何以編程方式設置或清除32位標誌?
- 23. MySQL ODBC連接器32位或64位?
- 24. Ubuntu 64或32位?
- 25. 如何在64位機器上將64位C++程序編譯?
- 26. 如何檢測,如果CPU是32位還是64位
- 27. 在64位機器上編譯32位應用程序以獲得64位應用程序
- 28. 從Google Web Toolkit檢測64位或32位Windows
- 29. 在32位和64位機器中總是長64位
- 30. 如何從32位或64位進程啓動64位PowerShell進程?
有幾種方法 - 您使用的計算機語言/操作系統是什麼? – 2011-05-08 15:17:48
任何語言都可以。儘管如此,我希望它儘可能通用,因此,例如Java,因爲幾乎所有操作系統都支持jvm。 – foobar 2011-05-08 16:00:10