C++內存管理1-64位系統運行32位軟件會佔用更多的內存嗎?

 

  隨着大容量內存成爲電腦平臺常規化的配置,在配置組裝機時不少的用戶都會選擇8GB甚至是16GB的容量規格內存使用在本身的機器上,若是要將這8GB甚至是16GB的內容在系統使用時能充分利用起來的話,你平臺必須使用64位的操做系統做爲支持。api

  但值得注意的是雖然64位系統已經在近幾年成爲主流,但很多的軟件或者很多的用戶在使用電腦時運行的軟件仍爲32位版本,這引起了一個有趣的問題。你須要更多或更少的內存來讓32位應用程序運行在64位版本的Windows?而且還有一個傳言是說「在64位系統運行32位應用程序所耗費的內存相比32位系統運行32位應用程序要高出1.5倍的需求」函數

  最近國外媒體就針對這一狀況經過測試來驗證是否在64位系統運行32位應用程序所耗費的內存相比32位系統運行32位應用程序要高這一選題是否真的成立。測試

  首先咱們要了解一下在64位系統裏面32位程序是怎樣執行的?在一個64位系統裏面當不採用任何兼容支持輔助是沒法讓32位程序實現運行的,畢竟32位程序對比64位程序在系統指針數據類型以系統調用指令,是不一樣的。spa

  因此咱們首先要知道什麼32位程序進程在64位系統上起到做用。操作系統

  

 

   注意:在64位操做系統上,Windows使用了WoW64子系統它有效地實現一個32位Windows的x64系統仿真器和基於Itanium(IA64)系統仿真器指針

  IA64系統是一個由處理器指令和不一樣的內存頁面大小(x86和x64爲4K,IA64爲8K)組成,因爲x64處理器具備x86處理器的全部的指令且使用相同的存儲器頁大小。在這兩種狀況下,提供了WoW64 64位的Windows內核32位版本的ntdll.dll之間的通訊界面,以便他們能夠經過Windows內核提供的原生64位功能處理。blog

  (ntdll是WindowNT操做系統原型中的庫)(即,經過WoW64子系統,能夠爲32位程序提供64位系統相應的工程處理接口

下圖是:32bit 的程序在64位操做系統中所依賴的模塊,其中都是從系統文件SysWOW64中提供的相應的32bit的庫dll進程

 

 

 

  用於x64和IA64系統實現需求三個DLL文件,分別爲wow64cpu.dll, wow64win.dll, and wow64.dll。他們的功能是在Win32k.sys中提供了Windows功能和部分包含執行、內核、內存管理、進程調度程序和其餘的操做系統核心要素內存

  一個thunk是一個子程序,它容許一個程序在系統中執行一個共同的子程序或函數。在這種狀況下,它提取從32位程序調用堆棧的參數,將它們轉換成它們的64位同行,並使得64位系統調用在從調用返回時,將64位的結果返回給32位轉換並推到程序的調用堆棧調用者使用

  

 此外還要須要注意其餘一些重要的差別

  IA64系統使用兩個附加文件:IA32exec.bin是x86軟件模擬器Wowia32x.dll提供了WoW64與軟件模擬器之間的接口

  一個32位程序的過程當中會加載這些文件,而在64位版本的ntdll.dll中都是能夠被加載到另一個DLL,apisetschema.dll,而在Windows 7和更高版本的32位進程,這將被加載到全部進程中惟一的64位二進制文件。

  當一個32位程序開始,它將加載wow64.dll依次加載ntdll.dll 32位版本和%SystemRoot% \ Syswow64任何須要的32位DLL。這些文件大多數是在32位系統中的相同的二進制文件,可是在WOW64有些已被重寫修改

  測試的方式經過虛擬機運行兩組Windows 7旗艦版本,分別爲64位系統和32位系統各一個而且使用相同的徹底安裝以及系統補丁安裝,每一個系統分配2GB的內存。禁用雙方的交換文件以得到更好的畫面內存 確保內存沒法調出到磁盤的使用狀況。

  經過Sysinternals Process Explore來收集系統運行時工做集以及WindowSystem的使用情況,這些工做組數字反映了程序所使用的內存數量。它更復雜的是即便它們已被另外一個進程加載也能經過其反映出共享庫所使用的內存量。測試監測以LibreOffice程序soffice.exe,soffice.bin在運行時須要在全部的三個過程當中尋找有效的內存使用量的全部程序。而測試方式是開啓計算器、打開一個三、7MB的.xls文件和一個3.9MB的.PPTX文件時所佔用的內存使用情況

 

 

   通過一系列的對比是對比32位系統與64位系統在內存佔用差別上不超過9.9%,而在一些同類型的測試中也得到了相相似的測試結果,甚至64位系統的最終使用比32位系統的內存更少。因此,64位版本的Windows的須要比他們的32位運行更多的RAM運行32位應用程序時?通常狀況下,是的。可是,你須要升級內存?可能不會,並且運行需求並無1.5倍的使用差別。

 

 

endl;

相關文章
相關標籤/搜索