Dynamische Array / Was passiert hier ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Dynamische Array / Was passiert hier ?

Beitrag von Socke »

mschnell hat geschrieben:Ich hätte (aus Performance-Gründen) vermutet, SetLength macht nur irgendetwas, wenn die ursprüngliche Länge kleiner ist (und setzt dann die allokierte Größe vorsichtshalber deutlich größer, z.B. auf die nächste Zweierpotenz) oder wenn die neue Größe wesentlich kleiner ist. Bessere Performance, aber keine Garantie für Refcount = 1. l
SetLength() legt keine Reserven für zukünftige Erweiterungen an. Wegen der Funktion der Speicherverwaltung gibt es eine "Reserve" vom Ende des Arrays bis zum Ende des reservierten Speicherblocks. Zu dem Thema gab es im Forum schon einmal eine detaillierte Diskussion. Wenn du eine Reserve haben möchstest, musst du diese selber einplanen oder eine Listen-Klasse verwenden (sämtliche Listenklassen allokieren eine Reserve bzw. man kann diese sogar manuell setzen).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten