nur mal was zum Thema Fragmentierung:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i: Integer;
M: array[1..25000000] of Pointer;
begin
WriteLn(Length(M) * 10, ' Byte belegen - weiter mit [enter]');
ReadLn;
for i := Low(M) to High(M) do
GetMem(M[i], 10);
WriteLn;
WriteLn('98% freigeben - weiter mit [enter]');
ReadLn;
for i := Low(M) to High(M) do
if i mod 50 <> 0 then
FreeMem(M[i]);
WriteLn;
WriteLn('nochmal 1% freigeben - weiter mit [enter]');
ReadLn;
for i := Low(M) to High(M) div 2 do
if i mod 50 = 0 then
FreeMem(M[i]);
WriteLn;
WriteLn('das restliche 1% freigeben - weiter mit [enter]');
ReadLn;
for i := High(M) div 2 + 1 to High(M) do
if i mod 50 = 0 then
FreeMem(M[i]);
WriteLn;
WriteLn('beenden - weiter mit [enter]');
ReadLn;
end.
bin gespannt, was dir der Taskmanager darüber sagt
ist war ein etwas krasses Beispiel - z.B. in D7:
- 250 MB für GetMem + 100 MB für's Array
- 500 MB belegt
- nach Freigabe von 98% des Speichers immernoch 500 MB belegt
- ...