Delphi常用記憶體管理函式

2021-07-23 16:52:13 字數 1925 閱讀 9418

1.new、dispose、getmem、freemem

newprocedure new(var p: pointer);:建立乙個新的動態變數,並把指標p指向這個新建立的變數。分配的記憶體大小由p指標表示的型別決定。

dispose

procedure dispose(var p: pointer);:用來釋放一指標變數所占用的記憶體位址。如使用,會產生乙個einvalidpointer異常。

getmem

procedure getmem(var p: pointer; size: integer);:為一指標分配一定大小的位址空間。

freemem

procedure freemem(var p: pointer[; size: integer]);:釋放某一指標在記憶體中用的位址空間。

[delphi]view plain

copy

procedure

tform1

.buttonclick1(sender: tobject);  

varp:pstring;  

begin

getmem(p,1256

);  

//為指標分配指定記憶體大小的指標

p^:='mingrisoft'

;  edit1.

text := p^;  

dispose(p);     //釋放指標位址

edit2.

text := p^;  

end;  

在建立指標和分配記憶體位址時,優先使用new和dispose。

2.allocmem、reallocmem、sysfreemem

allocmem

function allocmem(size: cardinal): pointer;:用於在堆中分配一塊記憶體區域,並初始化每一位元組為0。其返回值為乙個指向堆中已分配記憶體的指標。

rellocmem

procedure reallocmem(var p: pointer; size: integer);:用於重新分配乙個動態變數。這裡需要討論幾種情況:

1、如果p為nil並且size為0,則rellocmem不分配記憶體;

2、如果p為nil但size不為0,則rellocmem分配記憶體的過程等同於getmem;

3、如果p不為nil但size為0,則rellocmem將位址引到p並並設定p為nil。則此過程就類似於freemem的操作。

sysfreemem

function sysfreemem(p: pointer): integer;:釋放指標指向的記憶體空間。其返回值為0;否則返回非0。

[delphi]view plain

copy

procedure

tform1

.button1click(sender:tobject);  

vari : pshortstring;  

begin

i:= allocmem(256

);  

//在堆中分配記憶體

i^ := 'aaa'

;  reallocmem(i,256

);  

//重新分配記憶體

sysfreemem(i);      //釋放記憶體

end;  

3. 其它記憶體函式

sysreallocmem

function sysreallocmem(p: pointer; size: integer): pointer;:用於重新為變數分配記憶體區域。主要用於調節動態分配記憶體的空間大小。

finalize

procedure finalize( var v [; count: integer] );:用來動態分配變數的記憶體位址,這些分配的記憶體空間由其它方法而不是dispose方法來釋放空間。

delphi常用函式

1 生成指定個數字元的字串 stringofchar s 10 得到 ssssssssss 2 填充字元陣列 s array 0.79 of char fillchar s,sizeof s ord 這樣可以清空s陣列 3 刪除字串中指定的字串 delete s,16,1 功能說明 該函式有三個引數...

Delphi記憶體管理與記憶體洩漏探析

delphi記憶體管理與記憶體洩漏探析 楊繼巨集,龔 暉,李 治 摘引言 delphi是borland公司的劃時代之作,以其功能強大且易學 好用而受到廣大程式設計師的青睞。關於delphi的文章很多,大多數是討論其生產的高效率 各種應用的快速實現,卻忽視了乙個基本卻非常重要的問題記憶體動態 分配與安...

delphi 自定義記憶體管理

1.主要通過getmemorymanager來hook原來的記憶體管理。2.通過setmemorymanager來設定你自己的新的記憶體管理,可以用乙個記憶體池來優化和管理程式的記憶體呼叫情況。procedure registermemmgr varamgr tmemorymanagerex beg...