為什麼大多數32位的Windows被設計成只能用4GB的記憶體

時間 2021-05-05 18:17:42

1樓:

不用想太多,這就是歷史造成的。

其實這個問題相當於若干年以後的另乙個問題:

『為什麼64位的Windows只能訪問192G記憶體?』要知道,Windows95(32位)剛出來的時候,絕大多數家用電腦都還只有32M記憶體,能訪問4G記憶體已經是非常海量的設計。

2樓:月野兔小仙女

你說的沒錯32位系統可以支援4G以上記憶體,但是問題就是穩定性。作為系統,要保證穩定,不會經常出問題,給使用者帶來災難性使用體驗。

svr2008有32位版本,能支援高記憶體,但是經常和其他驅動或者軟體衝突導致藍屏(尤其是顯示卡驅動,N卡和Intel整合顯示卡都會直接藍屏無解)。

系統能支援高記憶體但是軟體未必支援,軟體沒有適配PAE無法正常使用高位記憶體會導致崩潰,如果是驅動崩潰就直接藍屏。

所以一切都以穩定為主。

我舉個例子吧,很多筆記本CPU都會降低功耗使用,犧牲了部分效能,但是保證了穩定性,防止筆記本出問題頻繁被使用者找售後,這個道理你懂了嗎?

3樓:「已登出」

說32位作業系統就只能定址4GB是有道理的,但是稍微不嚴謹。32位指的是最大操作整數是32位,也就是4G,而真正的定址空間還取決於定址方式等(比如你可以分兩個週期傳高32位和低32位位址,也是可以的,而且也可以按位定址、按字定址等),但是為了簡單,win32(或者說主流主機板和記憶體)選擇了按照位元組定址,那麼32位就對應了4GB,win32也就設計成了最大定址4GB。

理解了上面的問題,就能理解,為什麼win32只能定址4GB了。那問題來了,為啥設計成32位呢?為什麼不是8位,16位,或者一步到位64位,甚至整個非2的冪次的5位、7位呢?

首先說,作業系統是執行於硬體(或者更精確說,是CPU上的),那它的位數需要CPU支援。基於相容性考慮,主流的CISC技術CPU產品(如Intel),都是向下相容的,這也是為什麼你買個i9,明明是64位CPU,卻仍然可以安裝win32的原因(當然,如果隨機的其他硬體廠商沒開發驅動,也用不了,但是windows還是可以執行),因為64位CPU的部分暫存器,也可以當32位的來用(支援32位定址)。而我們知道,CPU基於半導體技術,在物理中(特別是電學),兩狀態比其他的狀態數都要好實現,你想想,是「有沒有蘋果」好判斷,還是「有幾個蘋果」好判斷?

所以,大部分計算機資料都是2的冪次,否則,明明可以表示2^8個數的硬體,非要表示250個數,不是很浪費嘛?

當然,從原理上講,windows可以設計成8位系統(說實話我不知道最初有沒有8位windows/dos),但是相對的,8位機定址空間256,除非用複雜辦法模擬(比如分多次傳址),這顯然慢的要死,而且256B記憶體,能執行大表哥2嘛(滑稽)。

那為什麼不一步到位,來個128位作業系統呢?原因很簡單,成本嘛。有人說windows乙個軟體,開發就是128位,成本能比64的大多少?

確實,單看軟體,沒什麼區別,但是別忘了,作業系統不是執行在空氣中的,硬體要花錢啊。128位以上的CPU才能執行128位作業系統,這可是實實在在的空間、技術啊。買個128位作業系統,你就用個4G記憶體?

不可能吧,那這筆錢誰出?既然我32G記憶體能完美執行大表哥2,我只是想打遊戲而已,我才不會去買2^128B的記憶體嘞,證是因為沒人買,所以沒人做,所以win128的執行環境現在是不存在的。

當然,也不排除G胖突然會說3,到那天,或許win256都會有咯。

4樓:悽臨雨

32位windows可以支援超過4G記憶體,這個其他答案說了

在此基礎上,32位程式在32位系統(未驗證過)或64位系統上,借助虛擬記憶體對映可以使用超過4G記憶體。那個記憶體可以臨時對映到4G空間內來使用,暫時不用的丟棄他的記憶體位址。

5樓:惜墨

因為常用cpu指令的定址是32位

並且指令位址指標是32位

並且資料位址指標是32位

想訪問超過4GB的記憶體必須以4GB為乙個分段,用乙個單獨的指令跳段訪問

PAE 就是這樣就算有了跳段各種基本指令也訪問不到 4GB外的位址。

16位機時代基本指令只能16位定址只能用64k記憶體

因為64k記憶體不夠用,32位cpu太貴,用了折中的辦法,增加了 20位定址指令,

32位時代末期,不這樣做的原因:

1 大部分程式用不著這麼多記憶體,即使用得著也可以開兩個程序用程序間通訊,不需要1個程序佔4g以上,

2 雖然開了36位的段定址,但是算術和傳輸指令還是在32位的,算術和傳輸指令還是訪問不到4g外的記憶體

3 因為生產成本的降低,用這種折中辦法不如直接上64位了,

4 16位時代是實模式,程式能訪問物理記憶體,32位時代是虛擬模式,程式訪問的是虛擬記憶體,cpu有個分配記憶體的頁面暫存器,由作業系統控制,程式直接想訪問物理記憶體就得獲取系統許可權,這就會出安全問題了。當然可以增加虛擬模式下的段定址,但是成本又增加了。

6樓:「已登出」

2023年誕生的奔騰Pro的位址匯流排是36位,所以那些跟你算2的32次方怎麼樣的答案全都可以不用看。

以上。其實也不用分析那麼多技術原因。

因為這其實是個人為限制

類似:低配車型為什麼用鹵素燈?

舉個栗子:

7樓:王俊

32位指的是通用暫存器的位寬,當執行訪存指令的時候使用的位址取自32位的通用暫存器,32位位址最大值就是4GB(32位全1),所以直接訪問記憶體的最大位址範圍就是4GB

8樓:

可能是考慮到相容性、速度等方面的考慮吧,32位機器要訪問更大的記憶體空間是不能直接訪問的,要各種轉換,換了更大的記憶體,卻影響了效能

但是我覺得這麼做更大的可能是推廣64位系統,64位CPU早就出來了,64位的優勢很明顯,然而市場上卻有很多64位CPU裝32位系統的電腦,微軟可能也不想在32位多費腦筋了吧,還不如簡單粗暴點。

emmm,關於32位訪問大於4G的問題,32位CPU的直接定址的位址空間確實是4G,在這個位址空間中還包括了CPU的各種狀態暫存器、IO、各種控制器,其中儲存器也是掛在這個空間中的,他們都是通過位址的方式進行訪問的。但是訪問儲存器啊,有很多方法訪問超大位址的,比如把乙個位址拆成兩半分別發給儲存器,也有分成行位址和列位址傳送的。

此處我貼個SDRAM的時序圖給大家康康,它的容量不是很大,但我覺得應該可以說明問題

先發乙個行位址再發乙個列位址

圖中的A0-9,12就是位址線

這雖然的一種DRAM的時序,但是DDR RAM也是差不多的,至少DDR3是這樣的

當然僅僅只是在使用32位arm處理器得出的一點拙見,望各路大神指正

9樓:

這不是乙個設計問題,而是乙個硬體的表達能力問題。2的32次方等於4,294,967,296,就是4.29G。

簡單的說就是用32根位址線只能從4.29g的集合中讀取到乙個數。雖然也有通過其他方式解決的可能性,但是顯然隨著64位處理器的出現變得沒有意義。

另外,把1k強制定義成1000真是沒誰了。。。

10樓:塵風

實際4G也用不了,只能用3G左右, 因為作業系統核心強制保留了1G(一般是3G到4G)的位址空間(是位址空間, 不是記憶體). 你在程式裡直接訪問3G以後的位址可能就會報錯被kill掉.

這個是linux的限制, windows可能不一樣.

11樓:Fluoxetine

32位系統本來就支援記憶體到4GB 能訪問大記憶體是PAE的功勞

32位的Windows本來就是支援PAE的。Win server 32位一直都支援超過4GB的記憶體,桌面版本也可以通過破解來實現支援4GB的記憶體。

只是在桌面版本,微軟並沒有開放PAE的功能 。微軟這樣做可能更多是基於利益考慮

12樓:北極

為何微軟不在新的作業系統中讓 32 位支援大於 4GB 的記憶體?

但凡說PAE的,都沒說到關鍵點上。還有人說因為32位所以最大記憶體只有2^32=4G,這簡直錯的離譜,暫存器寬度和定址範圍毫無關係。DOS在實模式下暫存器只有16位,最大範圍是64KB,但定址範圍可以到1MB。

定址範圍跟位址線有寬度有關,Intel 32位CPU早在2023年就支援36位位址線了。2023年,那可是Windows 95的時代,所以別再提32位位址線只有32位的說法了,都什麼年代的事情了。

32位Windows本來就是支援PAE的,PAE也允許硬體訪問4G以上的記憶體,所以問題的根本不在於PAE,而在於Windows的限制。

從以上回答中複製一部分關鍵的內容過來:

幾個結論:

1、PAE允許作業系統在32位模式下使用大於4G的物理記憶體。

2、不管是否使用PAE,對於單個程序而言,32位系統下可見的位址空間最大只有4G。

3、PAE的優勢是可以讓不同的程序(在不同的位址空間裡)累計使用大於4G的記憶體,因此而達到使用超過4G記憶體的目的。

4、32位Windows系列雖然支援PAE,但實際在使用中最大記憶體限制在了4G,是人為限制的,原因後面給分析(樓上給出的各種理由都不成立,這裡是有技術原因的)。

5、Linux則在開啟PAE的模式下能支援在32位系統中使用超過4G的記憶體。

6、Windows Server版32位允許使用超過4G的物理記憶體

參考文獻:The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista or in Windows XP Service Pack 2 or later version

給不懂的再翻譯一下:如果在32位Windows中使用超過4G記憶體,會影響驅動的DMA,容易導致程式崩潰或者藍屏,所以為了保持相容性,XP不允許使用超過4G記憶體(詳細解釋見引用的回答),Server版因為一開始就與普通版不相容,所以不存在相容性的問題。

所以,不要拿一堆公式來堆砌回答,根本沒答到點子上,2^32 = 4G這種公式誰都會。

Windows XP時代,有非官方的人做過XP 4G的補丁,但非常不穩定

關於DMA 4G的問題,這裡多說一下:

很多硬體,尤其是老硬體,做DMA的時候,要求記憶體實體地址必須是4G以下的,否則硬體可能會訪問不到記憶體,因為硬體自身的位址線是32位的。所以配套的驅動也需要在做DMA時,申請4G以下的記憶體空間。

微軟在這方面偷懶,32位環境下,預設所有的記憶體都是可以DMA的,預設所有記憶體都是4G以下的,這樣做很省事,驅動不需要判斷申請的物理記憶體位址,直接用就是了。但這就把驅動的工作範圍限定在4G以下了。而大多數驅動不會主動檢查實體地址範圍,這就導致一旦實體地址超範圍,驅動肯定崩。

解決的辦法也很簡單,就是改驅動,但問題是很多驅動都不是微軟寫的,而是第三方的,甚至連數字簽名也沒有,微軟顯然沒有能力推動廠商做這個事情,後果就是微軟不得不把32位Windows的桌面版本,限定在4G記憶體以內工作。

如果做過非x86驅動的人應該了解,在某些平台上(PPC/ARM/MIPS)並非所有的記憶體都可以做DMA,寫驅動的時候必須萬分小心,不能直接把malloc出來的記憶體交給硬體使用。

為什麼大多數飛機的螺旋槳是前置的,而大多數船舶的螺旋槳是後置的?

gjh1994 聽說直公升飛機如果機體過寬大,氣流吹在機體上過多,都會影響螺旋槳的公升力 飛機照理說前置螺旋槳吹出來的氣流會被發動機和機翼阻礙和擾動,對動力和機翼氣流都是損失。如果改為推式則全部螺旋槳推力,氣流不會受到擾動。設想一種上單翼貨機或客機,採用推式渦漿,因為機翼位置高,螺旋槳可以設計得很大...

為什麼大多數果實接近圓形?

昆塔迷 這個問題問題很具體,但是提煉出來的道理卻很深刻!你可以嘗試反問一下,再看看是什麼樣的!接著說說黃瓜,為什麼黃瓜生長空間沒有收到限制,卻不是圓的,又是長條的呢?這個就是因為黃瓜的基因決定的,黃瓜在不受空間限制的前提下,會按照基因的安排自由發揮,基因決定了長什麼形狀,那黃瓜就會長成什麼形狀。通過...

為什麼空姐大多數都很瘦?

方臉雲叔 行業標準及職業形象吧?當然行業標準也是會問標準的準則是什麼,從何而來.就說為什麼瘦 你去坐一次飛機 選個常規播音737坐坐 上去了你用心觀察一些走廊的寬度 我目測應該在60 70cm之間,有幾個拿個鄄城測量一下 呵呵 而亞洲女性胯寬平均值26.3cm.這個數值隨年齡怎麼增長還是縮減我也是收...