Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Aug 2023
Vielleicht war es auch nicht im SetLength selber, sondern im ReallocMem, aber egal.
{$POINTERMATH ON}
{$OVERFLOWCHECKS OFF}
procedure TForm4.FormShow(Sender: TObject);
var
TheArray: array of string;
ThePointer: Pointer;
ReallocCount, ResizeCount, RealSize, i: Integer;
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Aug 2023
Unabhängig davon, dass dieses Vorgehen eh bestraft gehört (was die Speicherverwaltung hier übernimmt)
ist es einfach nur schwachsinnig so oft nutzlos den Speichermanager zu beschäftigen.
Du hast also gleichzeitig 1-2 große Speicherblöcke (das Array),
eine Masse an kleinen Speicherblöcken (die vielen Strings)
und zussätzlich noch im Speicher verteilt anderes Zeugs, wie die EXE, DLLs usw.
...
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Aug 2023
Ja, Arrays sind immer zusammenhängend im Speicher.
Bei mehrdimensionalen dynamischen Arrays betrifft das jede Ebene/ParentLevel einzeln. (statische Arrays sind auch über alle Level immer zusammenhängend)
Und ja, wenn das Array der Speicher vergrößert wird, wird jeweils eine völlig neue Kopie erstellt,
also neuer Speicher, Inhalt rüberkopieren und das alte Freigeben.
Ich glaube auch...