Delphi-PRAXiS
Seite 2 von 3     12 3      

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 25. Mai 2008 19:15

Re: TList / dyn. Array - Was steckt dahinter?
 
Genau. Ein array ist in Delphi ersteinmal ein Pointer auf dem Stack (oder in einem Prozessorregister), der auf einen Bereich im Heap zeigt. Dieser Bereich hat eine feste Größe. Wenn man setlength aufruft, verändert der Speichermanager diese Größe. Überschneidet sich die neue Größe mit anderen Daten, wird das Array - glaube ich - an eine andere Stelle kopiert, die groß genug ist, und dann vergrößert.

Dass ein Array in Delphi eine verkettete Liste ist, ist eine Aussage, für die man einen Infolehrer erschießen sollte. Ich kenne keine Sprache, in der das so ist.

Mr_G 25. Mai 2008 19:37

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

Zitat von grenzgaenger
dein info lehrer hat unrecht.

... Es sei denn ich habe mich verhört und er hat das nicht so gesagt (ich werde das morgen mal prüfen...).

Und um nun ganz sicher zu sein:
Zitat:

Zitat von Zacherl
...Da der Datentyp ja feststeht hat der Speicherbereich die Größe der Summe aller Elemente mal der Datentypgröße. (n * SizeOf(TDatenTyp))

Zitat:

Zitat von grenzgaenger
'n pointer ist einfach die effizienteste datengrösse, welche dein prozessor abarbeiten kann (integer), und ist einfach eine adresse im speicher... nicht mehr, nicht weniger.

Steht bei einem String/Integer/Record/*was auch immer* nun nur die Adresse im dynamischen Array oder der Wert (und ist das bei einem statsichen anders)?

3_of_8 25. Mai 2008 19:40

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

Steht bei einem String/Integer/Record/*was auch immer* nun nur die Adresse im dynamischen Array oder der Wert (und ist das bei einem statsichen anders)?
String: Ja
Integer: Nein
Record: Nein
*was auch immer*: Wenn es ein String mit variabler Länge, eine Klasse oder ein dynamisches Array ist. Oder anders gesagt: Ein Datentyp, der irgendwie eine Finalisation benötigt, wenn ich mich nicht recht irre. Und bei statischen ist das auch nicht anders. Genaugenommen ist es nicht mal bei einer normalen Variable anders.

Mr_G 25. Mai 2008 20:05

Re: TList / dyn. Array - Was steckt dahinter?
 
Wunderbar...
Dann ist die Struktur eines dynamsiches Arrays also genau die gleiche wie die eines statischen Arrays und der einzige Unterschied liegt darin, dass die Speicherallokation dynamisch zur Laufzeit stattfindet (wobei aber auch immer ein zusammenhängender Speicherbereich genutzt wird)?

P.S.: Sorry das ich mich hier andauernd rückversichere, aber ich habe meinen Lehrer komplett gegenteilig verstanden...

grenzgaenger 25. Mai 2008 20:07

Re: TList / dyn. Array - Was steckt dahinter?
 
ja richtig, es wird immer ein ausreichender speicherbereich verwendet, sofern du ausreichend speicher hast. im anderen fall bekommst du 'n out of memory error.

Khabarakh 25. Mai 2008 20:16

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

Zitat von 3_of_8
Dass ein Array in Delphi eine verkettete Liste ist, ist eine Aussage, für die man einen Infolehrer erschießen sollte. Ich kenne keine Sprache, in der das so ist.

Könnte man doch quasi als Definition für Arrays hernehmen ;) . In funktionalen Sprachen wirst du als grundlegenden Listentyp dagegen eine verlinkte Liste finden. Arrays sind immutable eben nicht sehr hilfreich.
Zitat:

Zitat von 3_of_8
Record: Ja

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

Also nochmal:
  • Value Types:
    Primitive Typen
    Statische Arrays
    Records
    (object)
  • Reference Types:
    Klassen (, Interfaces)
    Dynamische Arrays
    String (mit einigen Value-Type-Merkmalen)

sirius 25. Mai 2008 20:26

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

Zitat von Mr_G
Dann ist die Struktur eines dynamsiches Arrays also genau die gleiche wie die eines statischen Arrays...

Jein.
Ja - Die Struktur ist dieselbe. Dein Array fängt irgendwo im speicher bei Adresse X an und jedes weitere Element N liegt bei X+N*sizeof(ArrayElement)

Der Unterschied liegt darin, dass beim Statischen Array deine Variable direkt den Wert X hat, beim dynamischen Array hast du einen Zeiger auf X.


(Ich hoffe ich habe jetzt nicht wieder verwirrt.)

Mr_G 25. Mai 2008 20:38

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

Zitat von sirius
Der Unterschied liegt darin, dass beim Statischen Array deine Variable direkt den Wert X hat, beim dynamischen Array hast du einen Zeiger auf X.

Und das ist so weil das dynamsiche Array evtl. mal seine Position wechselt um bei einer Größenveränderung weiterhin in einem zusammenhängenden Speicherbereich zu stehen und dann der Zeiger einfach(er) umgebogen werden kann?

DeddyH 25. Mai 2008 20:40

Re: TList / dyn. Array - Was steckt dahinter?
 
Auch, und weil die Größe eben dynamisch ist, das ist ja nur über Zeiger zu realisieren.

grenzgaenger 25. Mai 2008 22:16

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

Zitat von Mr_G
Und das ist so weil das dynamsiche Array evtl. mal seine Position wechselt um bei einer Größenveränderung weiterhin in einem zusammenhängenden Speicherbereich zu stehen und dann der Zeiger einfach(er) umgebogen werden kann?

du kannst keinen zeiger umbiegen, sondern, er wird dir, bei ausreichenden speicher vorausgesetzt, umgebogen. das heisst, z.b. du darfst keine zeiger auf zeiger oder absolut zeiger verwenden um deine daten zu adressieren, sondern musst sie dir, auf der basis des gerade gültigen base-pointers jeweils neu berechnen.

wie das ansatzweise funktioniert, hat dir sirius kurz aufgezeigt. wobei nicht immer die grösse auch die grösse ist... da z.t. die zeiger wiederum auf eigene daten und/oder objekte zeigen können. aber das wollt ich ich meinen ersten post gar nicht erwähnen, um keine verwirrung zu stiften.


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

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