![]() |
dynamische Arrays vergrößern
Hallo,
ich möchte einen dynamischen Array benutzen. Generell ist das kein Problem mit Setlength kann ich ja nun die Länge des Arrays angeben. Nun aber folgendes Problem. Zur Laufzeit soll sich der Array vergrößern, also hat der z.B. erst die Größe 1 und dann später kriegt er die Größe 2 weil dem Array ein neuer Wert hinzugefügt werden soll. Wenn ich jetzt erneut das Setlenght ereignis aufgerufen wird, wird dann der erste Wert gelöscht? Das möchte ich nämlich verhindern! Ich möchte also, dass ich zur Laufzeit den Array immer weiter vergrößere, dass aber die zugewiesenen Werte erhalten bleiben.. Das Problem ist, dass theoretisch die Maximallänge des Arrays bei unendlich liegt, zu Laufzeit, soll das ganze immer weiter erhöht werden (Stück für Stück) da das Programm auch theoretisch unendlich lange läuft (bzw. bis der Arbeitsspeicher voll ist) hab ich natürlich einen Abbruch des Programms reingeschrieben. mfg KahPee |
Re: dynamische Arrays vergrößern
Bei der Vergrößerung des Arrays wird der alte Inhalt kopiert, die Werte bleiben also erhalten.
In einer Schleife immer nur um eins vergrößern ist aber extrem langsam. Da ist dann ein Deltawert sinnvoll, so dass das Array immer gleich um 100 oder 1000 (je nach Anzahl) wächst. |
Re: dynamische Arrays vergrößern
Ist das vergrößern, der Länge um 10 schneller als das Vergrößern der Länge 10mal um 1?
Vielen Dank schon mal für die Antowrt.. |
Re: dynamische Arrays vergrößern
Zitat:
Zitat:
Desweiteren hätte man sich diese Frage auch schnell durch ausprobieren beantworten können. |
Re: dynamische Arrays vergrößern
Zitat:
Der Grund ist, dass bei einer Vergrößerung jedesmal ein neuer Platz im Speicher reserviert und der alte Inhalt da hinkopiert wird. Und daher ist das auch arbeitsspeicherintensiv. Deshalb vergrößere in größeren Schritte, je nach Anzahl der Werte in einer gewissen Zeit. |
Re: dynamische Arrays vergrößern
wenn die Größe des Arrays geändert wird,
wird eine neues Array angelegt, der Inhalt kopiert, die alte Version gelöscht und der Zeiger zum neuen Array in die Variable eingetragen ... also mit jeder änderung wird das Array kopiert. Wenn man da einen größeren Sprung nutzt, dann mußt nicht mehr bei jeder änderung das Array geändert/kopiert werden. |
Re: dynamische Arrays vergrößern
Zitat:
Zitat:
|
Re: dynamische Arrays vergrößern
Ich würde sagen, die Erhöhung der arrays hängt von dem ab, was Du vorhast. Wenn Dein Programm konstant alle zehn Sekunden einen neuen Wert ins array schreibt, ist das relativ egal, ob Du ein oder zehn Elemente zufügst. Dann ist ein Element einzufügen weniger Aufwand. Wenn die neuen Werte in Blöcken kommen, solltest Du auch das array blockweise vergrößern.
Wenn es um Performance bei schnellen Vorgängen geht, arbeitet man besser gleich mit festen arrays oder Du gibst gleich mit setlength eine feste Größe an - wenn Du weißt, dass ungefähr n Werte kommen reservierst den Speicher damit gleich. In der zweiten Variante kannst Du nach ein paar Monaten immer noch dranhängen. Grüße, Messie |
Re: dynamische Arrays vergrößern
Allerdings die Abbruchbedingung ist auch etwas mehr als abenteuerlich: "Lauf bis der Speicher voll ist." Und was passiert danach?
|
Re: dynamische Arrays vergrößern
Zitat:
Die Frage ist auch, was will man mit einer solchen Datenmenge im Speicher. Dafür gibt es Festplatten. Aber solange die Aufgabe nicht klar beschrieben ist, können wir auch lange über eine gute Strategie der Datenverwaltung diskutieren. :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz