全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3311
推到 Plurk!
推到 Facebook!

記憶體釋放程式(附Source Code)

 
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-22 14:53:15 IP:210.64.xxx.xxx 未訂閱
看到jlamlsc 介紹一個記釋體釋放程式 自己也寫一個簡單的記憶體釋放程式 原理很簡單,就是動態宣告一個非常大的陣列 當這個陣列的大小超過目前可用的記憶體空間時 Windows 作業系統就會自己將未連續的記憶體空間重新配置 自然就能提升可使用的記憶體空間了 有興趣的人就看一看吧…
天外來客
初階會員


發表:22
回覆:199
積分:44
註冊:2001-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-07-23 17:36:41 IP:211.74.xxx.xxx 未訂閱
不錯喔..玩看看..不知道能不能改善對98的幫助
引言: 看到jlamlsc 介紹一個記釋體釋放程式 自己也寫一個簡單的記憶體釋放程式 原理很簡單,就是動態宣告一個非常大的陣列 當這個陣列的大小超過目前可用的記憶體空間時 Windows 作業系統就會自己將未連續的記憶體空間重新配置 自然就能提升可使用的記憶體空間了 有興趣的人就看一看吧…
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-07-23 18:39:05 IP:192.168.xxx.xxx 未訂閱
引言: 看到jlamlsc 介紹一個記釋體釋放程式 自己也寫一個簡單的記憶體釋放程式 原理很簡單,就是動態宣告一個非常大的陣列 當這個陣列的大小超過目前可用的記憶體空間時 Windows 作業系統就會自己將未連續的記憶體空間重新配置 自然就能提升可使用的記憶體空間了 有興趣的人就看一看吧…
好神奇要多少有多少耶!!!!!!!!!!!!!!!!!!!! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-07-24 00:33:40 IP:61.59.xxx.xxx 未訂閱
呵…多謝你們的厚愛啦… 這是我以前VB寫的…Delphi 還不太熟…就拿來練習練習 會陸陸續續把以前在VB寫function改成Delphi 分享給大家 實際上並不是要多少有多少,它只是強迫OS重新檢討可用空間(零碎的) 我測過大約在執行一堆程式後,重整,可以回復RAM的一半空間 有學過"作業系統"這一門課的都知道這個原理 所以此法適用任何OS 有興趣的仁兄可以再修改加強一下,例如: 常駐系統列、記憶體低於某值時自動觸發、釋放數值固定化(16M/48M/96M/128M) 還可以多個Log統計圖 大家多多討論囉… 噓~~~~~~沉思中…
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-07-24 07:52:09 IP:211.74.xxx.xxx 未訂閱
試了一下...希望能對公司一些記憶體不足的硬體能有所改善...
azi
一般會員


發表:10
回覆:39
積分:9
註冊:2002-05-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-24 09:06:01 IP:210.241.xxx.xxx 未訂閱
不好意思,看了程式之後還是不懂,可否解釋: 程式裡只有一行  SetLength (s,i);  1.他是如何知道可用零碎的空間有多少呢? 2.如何做到 (當這個陣列的大小超過目前可用的記憶體空間時  Windows 作業系統就會自己將未連續的記憶體空間重新配置) 謝謝.    Azi
引言: 實際上並不是要多少有多少,它只是強迫OS重新檢討可用空間(零碎的) 我測過大約在執行一堆程式後,重整,可以回復RAM的一半空間 有學過"作業系統"這一門課的都知道這個原理 所以此法適用任何OS
--- Azi
------
---
Azi
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-24 10:59:19 IP:210.64.xxx.xxx 未訂閱
再詳細的說明如下…^^ s : array of byte; //s 是我宣告的陣列,先不指定大小 SetLength (s,i); //改變s陣列的大小為i,i是由user自訂 若你的ram有128mb,當你所宣告的陣列若為64mb大小 OS 接受你的需求,會試圖在記憶體內的找出所有可使用的空間,無論大或小 若有可以放下這個陣列的空間時,就成功的宣告了一個64mb的陣列 ,s 陣列是local 的變數,所以當按鈕按完後,s陣列被釋放 就有一個連續的記憶空間可用了 (一個完整的程式是不會被os拆散至各個記憶體片段的,所以系統必須自行找出可執行的空間),這樣子不知有沒有了解? 如果還有興趣了解更深入,可找"作業系統"一書,對於系統排程與記憶體管理都算蠻經典的。 噓~~~~~~沉思中…
系統時間:2024-04-29 17:41:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!