64位系統下,一個32位的程式究竟可以申請到多少記憶體,4GB還是更多?
阿新 • • 發佈:2019-02-09
前言:
- cpu的位是指一次性可處理的資料量是多少,1位元組=8位,32位處理器可以一次性處理4個位元組的資料量,依次類推。32位作業系統針對的32位的CPU設計。64位作業系統針對的64位的CPU設計。作業系統只是硬體和應用軟體中間的一個平臺。我們的CPU從原來的8位,16位,到現在的32位和64位。
背景:
電腦的記憶體是8GB, 裝的是32位的Win 7 32位版本,系統認出的記憶體是3.5GB, 應該說是4GB,因為還有0.5GB記憶體分配給了視訊記憶體。
筆者十分痛苦,花重金購置的駭客神條單條8GB竟然被瞬間閹割了4GB。為了物盡其用以及嚐鮮系統,又在另外一個分割槽上安裝了Win 8的64位版
- Win 7(X86)下的記憶體狀況:
- Win 8(X64)下的記憶體狀況:
問題:
在滿足的看著8G記憶體全部啟用以及體驗Win 8 Metro華麗的介面後,腦海裡突然飄出一個問題:64位系統下8G記憶體是否完全能為32位的程式所用。
實驗環境:
- Windows 7 ultimate(x86)
- Windows 8 Professional(X64)
- Visual Studio 2010 C++ 編譯一個32位程式控制臺應用程式
- 以GB為單位向系統申請記憶體
- 以32位方式編譯
- 主函式程式碼:
-
1 // CPP_MemoryStudy.cpp : Defines the entry point for the console application.
-
- 程式介面
- Win 7下執行(測試申請1GB記憶體 OK)
- Win 8下執行(測試申請1 GB記憶體 OK)
- Win 8下執行(單程序測試申請3 GB記憶體(總記憶體已 > 4GB) FAIL)
- Win 8 下(多32位程序在64位系統下申請記憶體>4GB OK)-- 這個點子是在和好友討論的時候想到的,測試了一下竟然可以
結論:
- 從初步實驗結果來看一個32位的程式在64位的環境下不具備使用4GB+記憶體的能力。
- 多個32位程式可以申請超過4GB的記憶體,
- 還有一個有趣的現象,當我申請記憶體大於4GB的時候,有的時候會顯示記憶體顯示成功,但是資源管理器裡面沒有更新,證明本質還是沒有成功,是保護的原因還是其他的原因還需要深究,這將作為下一章節的題材。
- 64位系統對於常年執行32位程式的使用者的意義只是有可以執行更多地單個32位程式的能力,32位的程式在64位系統下依然不具有定址4GB+的能力
- 通俗點說,就是擴大倉庫的容量,讓其可以放下更多貨物
後續研究思路:
- 將上述程式在64位環境下重新編譯,研究記憶體使用情況
- 那些號稱支援64GB RAM的32位伺服器系統,如Windows Server等,就竟單個程式可以使用到多少記憶體
以上是筆者一些膚淺的理解,尚待更多的研究論證,我會繼續跟進這個話題也歡迎您加入這個話題的討論。