關於 setprocessworkingsetsize 和記憶體釋放
在應用程式中,往往為了釋放記憶體等,使用一些函式,其實,對於記憶體操作函式要謹慎使用,比如大家常常想到的setprocessworkingsetsize,其實對於windows來說,系統會自動在程式閒置時(如程式被最小化)釋放記憶體的,自己用記憶體釋放時,往往會造成一些莫名的記憶體錯誤,造成自己的應用程式及系統不穩定。
將物理記憶體的占用挪到虛擬記憶體裡
其實,你也可以,試試看把乙個程式最小化到工作列,再看看任務管理器,看到沒,你的程式占用的實際記憶體一下子減少了,看來並不是我有什麼方法能夠壓縮記憶體,而是作業系統本身就有這個機制,即當程式不使用時(最小化),作業系統會呼叫某些命令,來將該程式占用的記憶體
移至虛擬記憶體,只保留一小部分常規**
所以我們就看到了 這種情景,占用的記憶體一下子就縮小了。
setprocessworkingsetsize
使用這個函式來設定應用程式最小和最大的執行空間,只會保留需要的記憶體。當應用程式被閒置或系統記憶體太低時,作業系統會自動呼叫這個機制來設定應用程式的記憶體。應用程式也可以使用 virtuallock 來鎖住一定範圍的記憶體不被系統釋放。事實上,使用該函式並不能提高什麼效能,也不會真的節省記憶體。因為他只是暫時的將應用程式占用的記憶體移至虛擬記憶體,一旦,應用程式被啟用或者有操作請求時,這些記憶體又會被重新占用。如果你強制使用該方法來 設定程式占用的記憶體,那麼可能在一定程度上反而會降低系統效能,因為系統需要頻繁的進行記憶體和硬碟間的頁面交換。之所以能夠 總是保持 最小記憶體,是因為使用了定時器,不停的進行該操作,,所以效能可想而知,雖然換來了小記憶體的假象,對系統來說確實災難。
該函式也並非無一是處,
1 。當我們的應用程式剛剛載入完成時,可以使用該操作一次,來將載入過程不需要的**放到虛擬記憶體,這樣,程式載入完畢後,保持較大的可用記憶體。
2.程式執行到一定時間後或程式將要被閒置時,可以使用該命令來交換占用的記憶體到虛擬記憶體。
linux應用程式記憶體布局
對向高記憶體位址生長,棧想低記憶體位址生長 linux中所有的應用程式都是這個布局,每個應用程式都是從0x80480000這個位址開始的,這樣衝突嗎?不衝突,因為這個位址是乙個虛擬位址,linux中每個應用程式都有自己的虛擬位址空間。第二行是資料段的記憶體位址範圍。第三行是堆的記憶體位址範圍。最後一...
C 應用程式記憶體結構
bss段 bss段 bss segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。資料段 資料段 data segment 通常是指用來存放程式中已初始化的全域性變數的一塊記憶體區域。...
應用程式與系統記憶體管理
1 虛擬記憶體管理器 windows提供了虛擬記憶體管理器,管理物理記憶體與硬碟之間的資料交換,以讓應用程式執行時,只有必須的 段和資料段進入物理記憶體,提高物理記憶體使用效率,並為並行程式提供執行環境。理論上win32虛擬記憶體管理器為每個win32程序提供私有4gb大小的線性虛擬位址空間,按頁來...