Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

11

08.07.2009, 22:37

Dynamische Arrays sind schon sinnvoll. Grade wenn sich deren Inhalt nur selten ändert! Man kann viel schneller auf einzelne Elemente zugreifen, als in einer verketteten liste, weil diese ja immer wieder durchlaufen werden muss. Außerdem haben dyn. arrays eben einen zusammenhängenden speicherbereich, können also genau wie normale arrays verwendet werden. z.B. in verbindung mit OpenGL ist das sehr hilfreich.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

09.07.2009, 09:42

Re: Dynamische Array´s oder Verkettete Liste

Zitat von »"Andi0310"«

Habe mir einmal durchgedacht.
Element in Dynamisches Arrya integrieren:
Neues Array in Grösse des alten + Grösse des neuen Objects erstellen, alte Objecte + neues Object dort einfüge, altes Array löschen und Zeiger neu zuweissen.
Oder
Object aus Array löschen und dann die Adressierungen für die anderen Objecte neu zuordnen um dann Lücken zu vermeiden. !!!!!


So naiv implementiert das natürlich keiner. Im Allgemeinen werden unterschiedliche Allokationsstrategien eingesetzt. D.h. es wird nicht nur für ein Element Platz geschafft, was in ein ewiges "Speicherreservieren und Elemente kopieren" enden würde. Normal wird, falls es zu einer Puffervergrößerung kommt, der Puffer um den Faktor 1.5 - 2 vergrößert, sodass jede Menge Platz für weitere Elemente ist und eine neue Reallokation erstmal ausbleibt.

Zitat von »"Andi0310"«


Ich glaube im grunde gibt es keinen Vorteiel für Dynamische Array`s, welche sich in der Speichergrösse verändern.


Doch, dynamische Arrays sind ja genau für sowas gemacht. Und die Vorteile liegen doch klar auf der Hand: Die Elemente liegen am Stück im Speicher, d.h. du kannst den Puffer (oder Teile davon) äußerst effizient, blockweise kopieren und das ganze ist kompatibel zu C-Arrays.
Hast du z.B. eine Liste von Vertices in einem dynamischen Array so kannst du sie, ganz praktisch, direkt per glVertex3fv an GL weiterreichen. Was wäre dein Ansatz für Vertices in einer Verlinkten Liste??

Außerdem ist der Zugriff natürlich indiziert. Was äußerst schnell- und für viele Situationen ein großer Vorteil ist.

Zitat von »"Andi0310"«


Ich habe das Kapitel in Gems 4 gelessen und kann für mich selbst nur auf den Punkt kommen, dass Verlinkte Listen in jedem Fall die praktischere und wie TrommlBomml oben schreibt auch eine schnelle Lösung sind.


Nein, das ist durch aus nicht der Fall. Verlinkte Listen haben ihre Vorteile (schnelles einfügen/löschen in der Mitte der Liste usw) aber wie oben bereits beschrieben haben auch dynamische Arrays viele Vorteile. Genauso haben beide Strukturtypen ihre Nachteile: z.B. verbraten Verlinkte Listen mal locker sizeof(int*) zusätzlichen Speicher pro Element. Speicherst du beispielsweise die o.g. Vertexliste als verlinkte Liste hast du statt z.B. 3*4 Byte vllt 4*4 Byte. Bei großen Vertexlisten also nicht unbedingt zu vernachlässigen.
Außerdem (um bei diesem Beispiel zu bleiben) sind Verlinkte Listen komplett inkompatibel zu compiled vertex arrays: äußert schlecht.

13

09.07.2009, 10:57

Hmm, ich hab überall Listen, nur beim Resource Manager ein Array
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

14

09.07.2009, 15:28

Zitat von »"Wümpftlbrümpftl"«

Das ganze in eine allgemeine Entscheidungsfrage zu packen stellt jedem halbwegs vernünftigen Programmierer doch die Fingernägel auf ;)

Würde ich nicht sagen. Listen sind, zumindest in Form von std::list, fast nie zu gebrauchen. Der minimalistische Vorteil, dass nichts kopiert werden muss, wenn man ein Element einfügt, wird lange davon weggemacht, dass für jedes Element in der Liste dynamisch Speicher allokiert werden muss (das kann die Implementierung auch nicht wegoptimieren). std::list bringt höchstens was, wenn die Items jeweils sehr groß sind (paar MB, aber wer macht schon sowas?) oder der Kopierkonstruktor sehr aufwendig ist..
Ein paar Vorteile hat std::list dennoch: Die Adresse jedes Objekts bleibt gleich und das Einfügen neuer Elemente invalidiert nicht andere Iteratoren.
Wenn man aber zB Pointer benutzt (zB std::list<Object*>) würd ich sehr von std::list abraten.. Lieber std::vector<Object*> oder die Liste selber implementieren, wenn man die Vorteile einer allgemeinen Liste haben möchte.

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

09.07.2009, 15:56

Zitat von »"Helmut"«

Listen sind, zumindest in Form von std::list, fast nie zu gebrauchen.


:shock:

16

09.07.2009, 18:16

Re: Dynamische Array´s oder Verkettete Liste

Zitat von »"David_pb"«

Was wäre dein Ansatz für Vertices in einer Verlinkten Liste??


Natürlich habe ich die Vertices und die Indices meiner 3D-Objecte auch in Array`s. Andres ginge das ja auch nicht.
Es ist ja auch so, dass ich hier ja aus der Object-Datei die Grösse für den zu reservierenden Speicher bekomme.

17

09.07.2009, 18:28

Zitat von »"dot"«

Zitat von »"Helmut"«

Listen sind, zumindest in Form von std::list, fast nie zu gebrauchen.


:shock:

:shock: :shock:
Ich verwend ca. zu 90% Listen - immer zb für Elemente wie Teile der Map, oder Sprites, die dann gedrawt und kolissionsgetestet werden müssen.
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

18

09.07.2009, 19:22

Re: Dynamische Array´s oder Verkettete Liste

Zitat von »"Andi0310"«

Zitat von »"David_pb"«

Was wäre dein Ansatz für Vertices in einer Verlinkten Liste??


Natürlich habe ich die Vertices und die Indices meiner 3D-Objecte auch in Array`s. Andres ginge das ja auch nicht.
Es ist ja auch so, dass ich hier ja aus der Object-Datei die Grösse für den zu reservierenden Speicher bekomme.


Hauptsache du verstehst das Verlinkte Listen nicht in jedem Fall praktischer sind...

Werbeanzeige