1. 程式人生 > >32位CPU不支援4GB+記憶體?終於搞懂了

32位CPU不支援4GB+記憶體?終於搞懂了

http://news.mydrivers.com/1/571/571392.htm

今天給大家科普一個,那就是記憶體定址能力與CPU的位寬有關係嗎?

答案是沒有關係。

這個問題以訛傳訛了很多人,傳了很久,確實有必要說說。

CPU的定址能力與它的地址匯流排位寬有關,而我們通常說的CPU位寬指的是資料匯流排位寬,它和地址匯流排位寬半毛錢關係也沒有,自然也與定址能力無關。
在這裡插入圖片描述
簡單的說,CPU位寬指的是一個時鐘週期內CPU能處理的二進位制位數,如8086 CPU是16位的,可以一次處理2個位元組(16個bit),80386 CPU是32位,能一次處理4個位元組,目前的CPU基本上64位的了,一次能處理8個位元組。

我們的Windows作業系統也分為32位和64位,主要是針對上面CPU的位寬做了些優化,比如32位的CPU就不能用64位的Windows(因為CPU一次只能處理32bit,而作業系統給你的指令是要處理64bit),但64位的CPU就可以執行32位的Windows,也能執行64位Windows。

那CPU的地址匯流排位寬到底是個什麼鬼?
在這裡插入圖片描述在這裡插入圖片描述

Intel的解釋是Physical Address Extensions (PAE) is a feature that allows 32-bit processors to access a physical address space larger than 4 gigabytes.

上面圖片是Intel Xeon E5-2698 v3的截圖,專門就擴充套件實體地址作了說明,大意就是說這個是為了讓32位的處理器能使用超過4GB的記憶體。

這個PAE就是CPU的地址匯流排位寬。在8086這個16位CPU上,它的地址匯流排位寬是20位,正好能定址1MB,80286它的PAE是24位,在Pentium II(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位作業系統的邏輯地址定址範圍只有2^32=4GB。

所以,不管你用什麼樣的CPU,它最多也只支援4GB的記憶體容量,但這是作業系統的鍋,並不是說32位CPU只能定址4GB空間。可能是在這兒容易引起錯覺,一定要還CPU一個清白。

32位CPU不支援4+GB記憶體?終於搞懂了