Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 18:34

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 16:55 
Offline
DGL Member
Benutzeravatar

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 17:27 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 17:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 23, 2009 04:33
Beiträge: 157
Programmiersprache: Turbo Delphi Pro
Hey cool vielen Dank. Dann kann ich ab jetzt dynamische Arrays ganz ungezwungen verwenden :)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 19:20 
Offline
DGL Member

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.

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 19:44 
Offline
DGL Member
Benutzeravatar

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]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 21, 2009 20:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 23, 2009 04:33
Beiträge: 157
Programmiersprache: Turbo Delphi Pro
Jo das TList intern ein Array verwendet wusste ich schon. Wobei ich auch schon verkettete Zeigerlisten selbst implementiert habe.

//edit um die Sache mit TList abzuschließen... intern ist das ein Array vom Typ TPointerList:
Code:
  1.  
  2.   MaxListSize = Maxint div 16;
  3.   PPointerList = ^TPointerList;
  4.   TPointerList = array[0..MaxListSize - 1] of Pointer;
  5.  


Also tatsächlich statisch.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]