Registriert: Do Jul 23, 2009 04:33 Beiträge: 157
Programmiersprache: Turbo Delphi Pro
Ich hätte auch mal ne Frage zu dynamischen Arrays, und schließe mich da einfach mal an. Also ich arbeite zwar schon jahrelang mit Delphi, aber habe um dynamische Arrays immer ein bisschen einen Bogen gemacht, weil ich persönlich Listen bevorzuge. Allerdings verwende ich Arrays trotzdem für bestimmte Sachen weil sie auch schneller implementiert sind. Dass das mit dem @-Operator nicht hinhaut habe ich daher auch neulich gemerkt (wollte ein Array mit Texturen anlegen, also Array of Cardinal). Meine Frage: würde das mit der angabe auf das erste Element sicher immer hinhauen? Ich hab dass dan so gemacht dass ich das Array per for-Schleife durchgehe, was natürlich länger dauert, mit dem ersten Element hab ichs gar nicht versucht, weil meine Überlegung war: wer sagt mir denn dass nicht die ersten 100 Elemente meinetwegen hintereinander stehen, und die nächsten 100 dann ganz woanders im Speicher? Grade wenn das Array etwas größer wird könnte es doch sein dass es gar nicht am Stück in den Speicher passt?
Also lange Rede kurzer Sinn: kann man sich immer darauf verlassen dass man mit @array[0] die Adresse bekommt wo dann alle daten am Stück liegen?
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen. (Koreanisches Sprichwort)
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Die Arrays von Delphi sind nicht fähig, getrennt im Speicher zu liegen. Das beantwortet einerseits deine Frage mit Ja, andererseits zeigt es das Problem auf, was beim vergrößern von an sich schon großen Arrays entsteht ... Irgendwo muss er einen zusammenhängenden Speicherblock der entsprechenden Größe auftreiben.
greetings
ps: Das nächste mal lieber ein neues Thema. So ganz im Zusammenhang mit VBOs ist es ja nicht mehr.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Jun 28, 2007 17:58 Beiträge: 193
Programmiersprache: Pascal, C
Dynamische Arrays sind eigentlich nur ein vom Compiler gewrapptes "GetMem", "ReallocMem", "FreeMem" und "Inc". Und da selbige Funktionen auch nur "am Stück" Speicher reservieren, gibt dir @array[0] die Addresse zurück, an der der reservierte Speicher steht.
Und noch was: TList verwaltet intern ein dynamisches Array und vergrößert dieses bei Bedarf (TList.Grow). Anders wie der Name vermuten lässt, handelt es sich nicht um eine verkettete Liste, sondern um eine Vektordatenstruktur.
Registriert: Do Apr 09, 2009 12:51 Beiträge: 53
Programmiersprache: Lazarus
@TList: Ne, nicht ganz, TList hat intern schon ein festes Array voll mit Pointern. Das 'Grow()' setzt nur interne Werte zur Verwaltung, wie viele valide Pointer noch in der liste sind. [size=x-small](Soweit ich das jetzt richtig in Errinerung habe)[/size]
Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.