Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: dynamisches Array -> setLength Problem

  Alt 10. Feb 2004, 15:50
Durchsucht mal das Forum. Dort haben schon mehrere (mich eingeschlossen) dieses Phänomen erklärt.

Um es kurz zu machen:
Konstruktor wie
Delphi-Quellcode:
for i := 0 to 100000 do
  SetLength(A, Length(a) + 1);
und
Delphi-Quellcode:
for i := 0 to 100000 do
  S := S + 'x';
machen im Hintergrund fast genau dasselbe.
Und gemeinsam haben sie, dass sie den Delphi Speichermanager mishandeln. Dieser reserviert nämlich den Speicher in Blöcken von Windows und wenn FreeMem aufgerufen wird, wird dieser Speicher nur wieder an Windows zurückgegeben, wenn der zusammenhängende Block frei ist. Ansonsten merkt sich der Delphi Speichermanager die Position und die Größe des freigegebenen Speicherbereichs um ihn schneller wieder zur Verfügung zu stellen als es Windows je könnte.
  Mit Zitat antworten Zitat