有關SetLength的記憶體管理問題 |
答題得分者是:ddy
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
var a:array of Integer; begin SetLength(a,5); a[5]:=5; SetLength(a,3); a[5]:=9; self.Caption :=IntToStr(a[5]); end;上面這個小程式,將一動態陣列由大改小,可是如果程式仍存取原範圍的值 ,仍然可以存取原陣列的資料,由此可之,SetLength 如果將array 縮小,原 資料仍然存在於記憶體中,可見此部份並未被系統清空,卻不在程式正常的操作範圍內我們以High / Length 取得的都是改變後的大小。至於這些空間就屬於系統自由使用的空間了,或許會有零碎的,OS 會處理這一切的 此網址http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19726 是我之前發表的記憶體釋放程式,其原理就是利用SetLength 改變動態陣列的大小,當我要釋放一個128mb 的空間時,就SetLength 128MB 的陣列,取得此空間後,再改變至SetLength 10MB縮小陣列,其餘的118MB 仍然在OS 手裡控管,所以setlength 陣列由大-->小,一般狀況下是不會影響系統效能,除非零碎的片段記憶空間太多,致使系統無可用空間時,才有可能影響程式效率(這些都是OS 該做的) 以上小小看法,如果其它先進發現我觀念有誤,尚請指教 噓~~~~~~沉思中… 發表人 - ddy 於 2002/11/20 22:46:36 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |