定义一个结构
type
pSendMsg =^TSendMsg;
TSendMsg= packed record
Source:String;
Dest:String;
Content:String;
end;
var
为了测试内存得释放情况。设置了一下下面得程序
在一个Timer 得ontimer事件中,申请内存,释放内容。
procedure TForm1.Timer1Timer(Sender: TObject);
var
sdMsg :pSendMsg;
br:Boolean;
begin
new(sdMsg) ;
sdMsg^.Source:='Source';
sdMsg^.Dest :='Dest';
sdMsg^.Content:='Hello World';
dispose(sdMsg);
//sdMsg := Nil;
end;
结果发现随着程序得运行,这个程序使用得内存越来越大!
这是为什么,难道是没有释放内存么?
但是dispose不是已经把内存释放了么!
type
pSendMsg =^TSendMsg;
TSendMsg= packed record
Source:String;
Dest:String;
Content:String;
end;
var
为了测试内存得释放情况。设置了一下下面得程序
在一个Timer 得ontimer事件中,申请内存,释放内容。
procedure TForm1.Timer1Timer(Sender: TObject);
var
sdMsg :pSendMsg;
br:Boolean;
begin
new(sdMsg) ;
sdMsg^.Source:='Source';
sdMsg^.Dest :='Dest';
sdMsg^.Content:='Hello World';
dispose(sdMsg);
//sdMsg := Nil;
end;
结果发现随着程序得运行,这个程序使用得内存越来越大!
这是为什么,难道是没有释放内存么?
但是dispose不是已经把内存释放了么!
New后用Dispose释放,Delphi只是把用new申请的内存标记为丢弃,并没有释放,如果有别的程序申请内存,那么有可能就会分配这部分内存出去!在没有其他程序申请内存的时候,增加也不是不可能的!
pSendMsg =^TSendMsg;
TSendMsg= packed record
Source:String;
Dest:String;
Content:String;
end;上面的代码是不是定义了一个指向记录类型(tsendmsg)的指针类型变量?
在定义记录类型时用到 PACKED是什么用处啊?
procedure TForm1.Button1Click(Sender: TObject);
var
sdMsg :pSendMsg;
br:Boolean;
begin
while true do
begin
new(sdMsg) ;
sdMsg^.Source:='Source';
sdMsg^.Dest :='Dest';
sdMsg^.Content:='Hello World';
dispose(sdMsg);
//sdMsg £º= Nil£»
end;
end;
var
sdMsg :pSendMsg;
br:Boolean;
begin
// while true do
begin
new(sdMsg) ;
sdMsg^.Source:='Source';
sdMsg^.Dest :='Dest';
sdMsg^.Content:='Hello World';
dispose(sdMsg);
//sdMsg £º= Nil£»
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.enabled:=true;
end;
Win2000+D6,没有任何问题