Hier mal das reine Defragmentierungsproblem
Delphi-Quellcode:
program Project8;
{$APPTYPE CONSOLE}
uses
Types, Windows, SysUtils;
function GetMemSize: Integer;
var
ms: TMemoryStatusEx;
begin
ms.dwLength := SizeOf(ms);
GlobalMemoryStatusEx(ms);
Result := ms.ullTotalVirtual - ms.ullAvailVirtual;
end;
var
i: Integer;
a: TIntegerDynArray;
begin
ReportMemoryLeaksOnShutdown := True;
try
i := 1;
while True
do begin
WriteLn(Format('
a: %0.n mem: %0.n', [i / 1, GetMemSize / 1]));
SetLength(a, i);
i := i * 2;
end;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
ReadLn;
end.
[]add
Delphi-Quellcode:
while True do
TForm1.Create(self);
ist noch besser, denn es erzeugt kein "echtes" Speicherloch, da kurz vor Programmende der Owner für's Aufräumen sorgt,

aber wärend des Programmablauf's wirkt sich dieses wie ein Speicherleck aus.
Ein Therapeut entspricht 1024 Gigapeut.