AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TList / dyn. Array - Was steckt dahinter?
Thema durchsuchen
Ansicht
Themen-Optionen

TList / dyn. Array - Was steckt dahinter?

Ein Thema von Mr_G · begonnen am 25. Mai 2008 · letzter Beitrag vom 27. Mai 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

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

  Alt 25. Mai 2008, 19:15
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#12

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

  Alt 25. Mai 2008, 19:37
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 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 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)?
Jan
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#13

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

  Alt 25. Mai 2008, 19:40
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#14

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

  Alt 25. Mai 2008, 20:05
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...
Jan
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#15

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

  Alt 25. Mai 2008, 20:07
ja richtig, es wird immer ein ausreichender speicherbereich verwendet, sofern du ausreichend speicher hast. im anderen fall bekommst du 'n out of memory error.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#16

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

  Alt 25. Mai 2008, 20:16
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 von 3_of_8:
Record: Ja
Nein !
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)
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#17

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

  Alt 25. Mai 2008, 20:26
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.)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#18

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

  Alt 25. Mai 2008, 20:38
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?
Jan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#19

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

  Alt 25. Mai 2008, 20:40
Auch, und weil die Größe eben dynamisch ist, das ist ja nur über Zeiger zu realisieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#20

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

  Alt 25. Mai 2008, 22:16
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz