服務器程式,一個在windows server 2003(32位)上運行,一個在2008(64位)上運行,而且2003上開的執行緒數量比2008還多,但2003上使用的記憶體比2008上少了100M,有誰對這方面比較熟悉嗎?
uj5u.com熱心網友回復:
1、系統不一樣,64位的windows 要比32位的復雜的多,不單純是擴展一下地址長度這么簡單。2、2003架構和2008 完全不一樣,你用32位的2003和64位的2003比較還差不多。
3、地址和資料欄位長度增加
uj5u.com熱心網友回復:
同樣的代碼,32、64編譯出來binary大小都不同。uj5u.com熱心網友回復:
我猜是這樣的:因為你32位系統的物理記憶體少,所以要有大部分的程式要快取到硬碟上。當你把程式放在64位系統的時候,因為物理記憶體比較多,所以不需要把很多程式快取到硬碟上,盡量把程式放在物理記憶體,所以64位比32位占用記憶體多
uj5u.com熱心網友回復:
是默認位元組對齊的問題么?32位是4位,64位是8位吧。。。應該會大點。
你全部改成pragma pack(1)看看。
uj5u.com熱心網友回復:
這么改,要是代碼在windows里還能無錯誤運行,那是奇跡
當初我就在這上面吃過苦頭,編譯無問題,普通運行無問題
但是一到某些點,就崩潰,查出的錯誤還是MFC內部的
uj5u.com熱心網友回復:
1、3、5樓說的都對uj5u.com熱心網友回復:
32位系統與64位系統因為地址長度不同,所以虛擬地址大小不同,與它們使用的物理記憶體大小無直接關系(只決定能使用的最大物理記憶體,如32位最大只能到4G,64位最大到2^64)。當然這就決定了,64位OS比32位能使用更多記憶體,但這并不能回答題主的問題:為什么會耗費更多記憶體。
本人覺得應該是:1.地址長度-->命令集不同-->編譯后bin變大(由于底層資料調取都與地址相關造成);
2.地址空間變大-->記憶體頁表變大
3.系統復雜-->內核占的記憶體增多
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/139776.html
標籤:進程/線程/DLL
