線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1287
推到 Plurk!
推到 Facebook!

靜態陣列的記憶体問題?

缺席
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-05 14:05:45 IP:163.15.xxx.xxx 未訂閱
當宣告一個靜態陣列時,系統會配置所宣告大小的記憶体空間來使用,請問,當用不到所宣告的陣列時,所配置出來的記憶体空間將如何釋放?可否自行釋放?謝謝。
------
我也在努力學習中,若有錯謬請見諒。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-05 14:39:33 IP:219.130.xxx.xxx 未訂閱
這個和 string 一樣,沒用時便會自動釋放 比方說你那個陣列是 一個 function 的 local variable 該 function 執行後便會自動釋放 在 Delphi Memory 的基本原理是 : Delphi 自動取得的 Delphi 自動釋放 使用者自行取得的 (如用 GetMem 或 New) 使用者自行釋放 物件也是使用者 Create 的 自行 Destroy (或 Free)
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-05 16:18:56 IP:211.76.xxx.xxx 未訂閱
靜態的陣列, 於其 scope 結束後便會釋放的.    另外補充一下 Justmade 兄的 New Procedure 和 GetMem Proceudre 的釋放分別為 Dispose 及 FreeMem, 相關的範例程式如下:    
type
  PListEntry = ^TListEntry;
  TListEntry = record
    Next: PListEntry;
    Text: string;
    Count: Integer;
  end;
var
  P: PListEntry;
begin
  ...
  New(P);
  P^.Next := List;
  P^.Text := 'Hello world';
  P^.Count := 1;
  ...
  Dispose(P);
end;    //
//
var      F: file;
  Size: Integer;
  Buffer: PChar;
begin
  AssignFile(F, 'test.txt');
  Reset(F, 1);
  try
    Size := FileSize(F);
    GetMem(Buffer, Size);
    try
      BlockRead(F, Buffer^, Size);
      ProcessFile(Buffer, Size);
    finally
      FreeMem(Buffer);
    end;
  finally
    CloseFile(F);
  end;    end;
系統時間:2024-05-17 3:49:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!