Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList / dyn. Array - Was steckt dahinter? (https://www.delphipraxis.net/114447-tlist-dyn-array-steckt-dahinter.html)

3_of_8 26. Mai 2008 13:28

Re: TList / dyn. Array - Was steckt dahinter?
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von 3_of_8
Record: Ja

Nein :shock: !
Das ist doch der einzige Vorteil gegenüber Klassen: Records sind Wertetypen.

Hoppala, hab ich da ernsthaft "ja" geschrieben? Das war in Versehen, ich ändere das gleich...

Mr_G 26. Mai 2008 17:06

Re: TList / dyn. Array - Was steckt dahinter?
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, Lehrer interviewt und folgendes rausbekommen:
Wird ein dynamisches Array erstellt so wird der Speicher nach dem hier schon beschriebenen Muster alloziert. Wird das Array nun jedoch erweitert so wird lediglich ein "neuer" Speicherblock für die Erweiterung reserviert und am Ende des ersten Speicherblocks findet sich ein Zeiger auf den nächsten. Zur Indexberechnung wird dann zusätzlich eine "Tabelle" herangezogen, die den Startindex und die dazugehörige Adresse des Bereichs enthält. Diese Art der Verknüpfung ähnelt der verketteten Liste und hätte theoretisch den Vorteil, das keine riesigen Datenmengen durch den Speicher geschoben werden müssen.
Ich hab mal die kleine schematische Darstellung dieser Erklärung angehängt.
Was nun Delphi letztendlich aus dem dynamischen Array macht konnte mir mein Lehrer nicht mit Gewissheit sagen (evtl. könnte sich da im Laufe der Versionen was an der Implementierung verändert haben) aber ich finde das Prinzip schon einleuchtend. In wie weit hat denn nun wer Recht?

sirius 26. Mai 2008 18:06

Re: TList / dyn. Array - Was steckt dahinter?
 
Wir haben natürlich Recht :mrgreen:

In Delphi ist es immer so, dass ein Array zusammenhängt. Dazu muss es, wenn es verlängert wird ggf. umkopiert werden.

Medium 27. Mai 2008 01:51

Re: TList / dyn. Array - Was steckt dahinter?
 
Jub, Delphi kopiert um. Wäre das nicht so, könnte man Indizierung via Pointerarithmetik auch vergessen, und gelegentlich ist das auch heutzutage noch eine schön performante Alternative. Es mag sein, dass manche andere Sprachen diese Form von Fragmentierung eines dyn. Arrays betreiben, Delphi macht es allerdings definitiv nicht.

Spaßig ist in Delphi auch die mitgelieferte TList. Der Name suggeriert eine Linked-List, aber hinter TList steckt wieder nichts anderes als ein dyn. Array (of Pointer in diesem Fall). TList verwaltet lediglich das Wachsen/Schrumpfen des Arrays automatisch, und bietet ein ähnliches Interface wie eine doppelt verkettete Liste. Das hat seine Vor- aber auch Nachteile. Eine Liste im allgemeinen Sinne ist es jedoch nicht.
Hier gilt also: Im Spezialfall Delphi stimmt die Aussage, dass ein TList auf einem dyn. Array basiert - allgemein ist eigentlich eine Menge von Objekten gemeint, von denen jedes einen Verweis auf seinen Nachfolger (und ggf. Vorgänger) besitzt, und sonst keine Organisation in Arrays o.ä. passiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz