記憶體釋放程式(附Source Code) |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
看到jlamlsc 介紹一個記釋體釋放程式
自己也寫一個簡單的記憶體釋放程式
原理很簡單,就是動態宣告一個非常大的陣列
當這個陣列的大小超過目前可用的記憶體空間時
Windows 作業系統就會自己將未連續的記憶體空間重新配置
自然就能提升可使用的記憶體空間了 有興趣的人就看一看吧…
附加檔案:00019726_記憶體釋放程式.zip
|
天外來客
初階會員 發表:22 回覆:199 積分:44 註冊:2001-11-27 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
呵…多謝你們的厚愛啦…
這是我以前VB寫的…Delphi 還不太熟…就拿來練習練習
會陸陸續續把以前在VB寫function改成Delphi 分享給大家 實際上並不是要多少有多少,它只是強迫OS重新檢討可用空間(零碎的)
我測過大約在執行一堆程式後,重整,可以回復RAM的一半空間
有學過"作業系統"這一門課的都知道這個原理
所以此法適用任何OS 有興趣的仁兄可以再修改加強一下,例如:
常駐系統列、記憶體低於某值時自動觸發、釋放數值固定化(16M/48M/96M/128M)
還可以多個Log統計圖 大家多多討論囉… 噓~~~~~~沉思中…
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
azi
一般會員 發表:10 回覆:39 積分:9 註冊:2002-05-27 發送簡訊給我 |
不好意思,看了程式之後還是不懂,可否解釋:
程式裡只有一行 SetLength (s,i);
1.他是如何知道可用零碎的空間有多少呢?
2.如何做到
(當這個陣列的大小超過目前可用的記憶體空間時
Windows 作業系統就會自己將未連續的記憶體空間重新配置)
謝謝. Azi
引言: 實際上並不是要多少有多少,它只是強迫OS重新檢討可用空間(零碎的) 我測過大約在執行一堆程式後,重整,可以回復RAM的一半空間 有學過"作業系統"這一門課的都知道這個原理 所以此法適用任何OS--- Azi
------
--- Azi |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
再詳細的說明如下…^^
s : array of byte; //s 是我宣告的陣列,先不指定大小 SetLength (s,i); //改變s陣列的大小為i,i是由user自訂 若你的ram有128mb,當你所宣告的陣列若為64mb大小
OS 接受你的需求,會試圖在記憶體內的找出所有可使用的空間,無論大或小
若有可以放下這個陣列的空間時,就成功的宣告了一個64mb的陣列
,s 陣列是local 的變數,所以當按鈕按完後,s陣列被釋放
就有一個連續的記憶空間可用了 (一個完整的程式是不會被os拆散至各個記憶體片段的,所以系統必須自行找出可執行的空間),這樣子不知有沒有了解?
如果還有興趣了解更深入,可找"作業系統"一書,對於系統排程與記憶體管理都算蠻經典的。 噓~~~~~~沉思中…
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |