L
liguang
Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手大家好:
我正在开发的应用程序中需要一个在内存中的动态储存结构。经过仔细考
虑,我决定使用TList+record的方法来实现。但是具体在实现时有一些问题我
无法解释。请各位高手帮我。
请见如下代码段:
tmyrecord=record
width:integer;
height:integer;
name:string;
end;
pmyrecord=^tmyrecord;
MemoryData:TList;
//........................
procedure TForm1.FormCreate(Sender: TObject);
begin
MemoryData:=TList.Create;
end
procedure TForm1.FormDestroy(Sender: TObject);
begin
MemoryData.Free;
end;
procedure TForm1.memalloc;
var
datamyrecord;
begin
new(data);
with data^.do
begin
width:=100;
height:=100;
name:=Edit1.Text
end;
MemoryData.Add(data);
end;
procedure TForm1.memfree;
var
i,j:integer;
begin
j:=MemoryData.Count-1;
for i:=0 to jdo
Dispose(PMyRecord(MemoryData.Items);
MemoryData.Clear;
end;
问题1:当我使用memfree函数将内存Free掉后,使用API函数
GlobalMemoryStatus返回当前内存SIZE时发现,释放后的内存数量竟然和释放
前是一样的。是不是memfree函数并没有起到释放内存的作用。
问题2:delphi中的New和Dispose函数好像是从堆栈中分配内存的。如果需要
分配内存的记录的数量很多(10000-20000条左右)。那么这种做法是否会引起
堆栈溢出的情况。
问题3:程序在使用Dispose函数Free内存时是否会一起释放掉name所指向的字
符串。如果不能,有什么办法可以Free掉这个字符串。
问题4:顺便问一下,TStrings,和TList是不是也通过从堆栈中分析内存的方
法来保存Add到它们之中的数据。
以上问题我急着解决。希望您能尽快回答,谢谢!
我正在开发的应用程序中需要一个在内存中的动态储存结构。经过仔细考
虑,我决定使用TList+record的方法来实现。但是具体在实现时有一些问题我
无法解释。请各位高手帮我。
请见如下代码段:
tmyrecord=record
width:integer;
height:integer;
name:string;
end;
pmyrecord=^tmyrecord;
MemoryData:TList;
//........................
procedure TForm1.FormCreate(Sender: TObject);
begin
MemoryData:=TList.Create;
end
procedure TForm1.FormDestroy(Sender: TObject);
begin
MemoryData.Free;
end;
procedure TForm1.memalloc;
var
datamyrecord;
begin
new(data);
with data^.do
begin
width:=100;
height:=100;
name:=Edit1.Text
end;
MemoryData.Add(data);
end;
procedure TForm1.memfree;
var
i,j:integer;
begin
j:=MemoryData.Count-1;
for i:=0 to jdo
Dispose(PMyRecord(MemoryData.Items);
MemoryData.Clear;
end;
问题1:当我使用memfree函数将内存Free掉后,使用API函数
GlobalMemoryStatus返回当前内存SIZE时发现,释放后的内存数量竟然和释放
前是一样的。是不是memfree函数并没有起到释放内存的作用。
问题2:delphi中的New和Dispose函数好像是从堆栈中分配内存的。如果需要
分配内存的记录的数量很多(10000-20000条左右)。那么这种做法是否会引起
堆栈溢出的情况。
问题3:程序在使用Dispose函数Free内存时是否会一起释放掉name所指向的字
符串。如果不能,有什么办法可以Free掉这个字符串。
问题4:顺便问一下,TStrings,和TList是不是也通过从堆栈中分析内存的方
法来保存Add到它们之中的数据。
以上问题我急着解决。希望您能尽快回答,谢谢!