首先:请耐心等待,这实际上并不能完全回答您的问题,但它太大了,无法在评论中发布。此代码是使用 FPC 编写和编译的,但它可以为您提供一些估计。可能有人知道如何将它移植到德尔福。
program project4;
uses
SysUtils,
Classes;
var
p: Pointer;
sl: TStringList;
var
a: TFPCHeapStatus;
begin
a := GetFPCHeapStatus;
writeln('== 1 ==');
//writeln(a.MaxHeapSize);
writeln(a.MaxHeapUsed);
//writeln(a.CurrHeapSize);
writeln(a.CurrHeapUsed);
//writeln(a.CurrHeapFree);
GetMem(p, 1024);
a := GetFPCHeapStatus;
writeln('== 2 ==');
writeln(a.MaxHeapUsed);
writeln(a.CurrHeapUsed);
sl := TStringList.Create;
a := GetFPCHeapStatus;
writeln('== 3 ==');
writeln(a.MaxHeapUsed);
writeln(a.CurrHeapUsed);
sl.Add('To beer or not to beer? That is the question!');
a := GetFPCHeapStatus;
writeln('== 4 ==');
writeln(a.MaxHeapUsed);
writeln(a.CurrHeapUsed);
Readln;
end.
和输出:
== 1 ==
2448
2448
== 2 ==
3488
3488
== 3 ==
3568
3568
== 4 ==
3616
3616
另一个带有大文本文件的测试:
sl.LoadFromFile('tolstoy - war and peace.txt');
a := GetFPCHeapStatus;
writeln('== 4 ==');
writeln(a.MaxHeapUsed);
writeln(a.CurrHeapUsed);
输出:
== 3 ==
3568
3568
== 4 ==
8837104
4643776
文件大小:3,1 Mb(3 280 005 字节)(ansi 编码)