Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.053 Beiträge
 
Delphi 12 Athens
 
#27

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 16:05
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Aug 2010 um 16:13 Uhr)
  Mit Zitat antworten Zitat