現在無論是電腦里面的x86處理器還是手機里面的ARM處理器都是64位的了,通常對于消費級的產品來說,就是支持x86-64指令集的x86處理器,或是支持ARM64指令集的ARM處理器。其實早在上世紀60年度64位的CPU就已經用在超級計算機上,到了90年代64位處理器也開始應用于工作站與服務器,個人電腦是在AMD2003年推出速龍64后才開始漸漸普及,而智能手機上用的64位處理器ARMv8-A架構是2011年發布的。
這里所說的64位是指CPU的位寬,簡單的說,CPU位寬指的是一個時鐘周期內CPU能處理的二進制位數,如8086CPU是16位的,可以一次處理2個字節(16個bit),80386CPU是32位,能一次處理4個字節,目前的CPU基本上64位的了,一次能處理8個字節。我們的Windows操作系統也分為32位和64位,主要是針對上面CPU的位寬做了些優化,比如32位的CPU就不能用64位的Windows(因為CPU一次只能處理32bit,而操作系統給你的指令是要處理64bit),但64位的CPU就可以運行32位的Windows,也能運行64位Windows。
64位CPU的優點是可以進行更大范圍的整數運算,吞吐量大的程序運行起來會更快,但大家經常對CPU的位寬認識有一些誤區,比如有人說為了支持更大的內存才CPU才升64位,也有人認為32位系統只支持4GB內存,真的如此嗎?
最大內存容量和CPU的位寬有關系嗎?CPU的尋址能力與它的地址總線位寬有關,而我們通常說的CPU位寬指的是數據總線位寬,它和地址總線位寬半毛錢關系也沒有,自然也與尋址能力無關。
數據總線位寬等于CPU整數型寄存器的位寬,CPU內的寄存器通常可分為三種:整數型、浮點型還有其他,而這三種寄存器中只有整數寄存器可以存放指針值也就是內存數據地址,非整數寄存器不可存放指針值,所以讀寫內存操作不能避開整數型寄存器的位寬限制,以64位CPU為例,這些CPU的內部整數型寄存器的位寬為64bit,支持整數的64bit寬度的算術與邏輯運算。
但這并不代表64位CPU的所有總線與寄存器都是64位的,不同類型的寄存器也可以有著不同的位寬,上面說的64位CPU的整數寄存器位寬是64位沒錯,但浮點寄存器就不一樣了,比如奔騰MMX處理器所引入的MMX指令集開創了x86處理器支持SIMD操作的先河,該指令集定義了8個64位的浮點寄存器,而奔騰MMX本身只是個32位處理器。1999年推出,同樣只有32位的奔騰3處理器新增了SSE指令集,與之配套的是8個128位寄存器,而后來的AVX2與FMA指令集可支持256位的運算,浮點寄存器也擴大到256位,目前CPU內部最大的是AVX-512指令集所用的512位寄存器。
CPU內有許多不同的寄存器
那CPU的地址總線位寬到底是個什么鬼?
Intel的解釋是PhysicalAddressExtensions(PAE)isafeaturethatallows32-bitprocessorstoaccessaphysicaladdressspacelargerthan4gigabytes.上面圖片是IntelXeonProcessorE5-2698v3的截圖,專門就擴展物理地址作了說明,大意就是說這個是為了讓32位的處理器能使用超過4GB的內存。這個PAE就是CPU的地址總線位寬,在8086這個16位CPU,它的地址總線位寬是20位,正好能尋址1MB,80286它的PAE是24位,在PentiumII(32位CPU)時這個PAE變成了36位,可以支持64GB的尋址。64位CPU出現之后,其地址總線位寬一般采用的是36位或者40位,它們尋址的物理地址空間為64GB或者1T。
那地址總線和數據總線有什么關系?可以這么理解,地址總線用來定位,數據總線用來傳輸,也就是當CPU需要從內存讀取數據或向內存寫入數據時,它使用地址總線來指定其需要訪問的存儲器塊的物理地址,然后通過數據總線發送數據。
所以說,CPU的位寬和尋址能力是沒有關系的,16位CPU的地址總線位寬可以是20位,32位CPU的地址總線可以是36位,64位CPU的地址總線位寬可以是40位。所以你下次一定不要說32位的CPU只能尋址2^32(4GB)了,大錯特錯。
32位系統只支持4GB內存?理論上32位操作系統的邏輯地址尋址范圍只有2^32=4GB,但實際上并不是這樣的,雖然常見的Windows732位(真有人在用Windows1032位嗎?)系統確實只能識別4GB內存,而且最大可用內存最多為3.25GB,但同為32位的WindowsServer2003/2008卻可用使用4GB以上的內存,因為這些系統支持PAE物理地址擴展技術。
PAE除了CPU自身支持之外,還需要芯片組、主板還有操作系統的支持才行,比如一些舊主板就不支持大于4GB物理內存,而微軟也沒有把PAE功能***到32位的家用操作系統中,即使是WindowsServer系統,如果不是企業版的也沒有***PAE功能。
當然了WindowsXP/7/8/10系統的內核本身是支持PAE功能的,32位版的系統可通過破解開啟此功能以支持4GB以上內存,破解***其實也不難,網上有許多現成的工具,但說真的,與其去破解,還不如直接裝64位的操作系統一了百了。
如果你還在用32位處理器,以上這些都不是你需要考慮的問題。