我使用德尔菲XE8测试SetLength()和GetMem()程序。
测试SetLength()的代码
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
a: array of Byte;
begin
SetLength(a,100*1024*1024); //100Mb
ShowMessage('See Task Manager');
SetLength(a,0);
end;任务管理器显示Project1.exe的内存使用量是~100 is。

测试GetMem()的代码
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
p: PByte;
begin
GetMem(p,100*1024*1024); //100Mb
ShowMessage('See Task Manager');
FreeMem(p);
end;任务管理器显示Project1.exe的内存使用量为~2Mb。

任务管理器显示使用SetLength()时正确的内存使用情况。我的问题是:SetLength()比GetMem()好吗?
这是我的考验:
https://www.mediafire.com/file/r0dfb99mlc8h1jj/DelphiTest.rar/file
发布于 2022-10-26 20:22:00
看起来,正在告诉您一个不同内存的值(可能是使用的,而不是分配的)。我得到的结果与您使用TaskManager时的结果相同。
但是,我通常不使用它,我使用。
在程序快照中,应用程序称为GetMem,Process显示了正确的图形。第一列是虚拟大小,第二列是私有字节。它们都增加了1亿。
先于

后

SetLength也显示了类似的数据。也就是说,就Delphi而言,内存的使用情况与应该是一样的。
https://stackoverflow.com/questions/74205051
复制相似问题