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

1

27.09.2012, 17:29

Ist es sinnvoll Objekte in mehrere Listen zu stauen?

Hallo,

die Frage nochmal detaillierter:

Macht es Sinn eine Liste mit X Objekten in zwei zu teilen, also die Hälfte der Objekte
dieser Liste in eine zweite Liste zu stauen...?

Denn eine Liste mit 1.000.000 Objekten besitzt ja den maximal erreichbaren Index 999999.
Das heißt prinzipiell dass der Rechner bei jeder Addition des Indexes dutzende Bit-Operationen erledigen muss...

Deswegen habe ich mich halt gefragt ob es einen bemerkbaren Performance Unterschied geben würde,
wenn der Zahlenbereich in dem iteriert wird niedriger ist und somit die Bit-Operationen kürzer ausfallen.

...Oder Lebe ich mit dieser Überlegung noch im 20. Jahrhundert?

LG Jack!

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

27.09.2012, 17:36

ich habe zwar nicht viel ERfahrung damit, wie Prozessoren das genau handhaben, aber meines Wissens ist diese Aufteilungs nicht nur unnütz, sondern eher kontraproduktiv
die Addition von 2 Zahlen dauert meines Wissens immer gleich lang, egal wie groß die Zahlen sind
allerdings ist das ständige Unterscheiden, ob sich das Objekt nun in der einen oder in der anderen Liste befindet, wesentlich aufwändiger

aber: auch das dürfte die Performance nicht spürbar beeinflussen, es sei denn, du führst diese Zugriffe übermäßig oft je Frame durch (dann würde es sich negativ auswirken)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

3

27.09.2012, 17:45

Ich würde statt zwei Containern einfach den richtigen Container verwenden. Eine Folge von Daten nur aufgrund ihrer Größe auf 2 Container aufzuteilen ist deshalb wenig sinnvoll, weil du irgendwo für jedes Element speichern müsstest, welcher Container zu durchsuchen ist. Dass das wenig effizient ist, sollte klar sein. Die andere Frage ist: Warum willst du dauernd durch deinen Container iterieren? std::map und std::vector bieten dir Zugriff auf jedes beliebige Element, ohne dass iteriert werden müsste. Möchtest du häufig Objekte in deinen Container einfügen oder daraus entfernen, musst du seltenst auf ein beliebiges Element zugreifen (z.B. std::list).
Es gilt durch geschicktes Design und an die jeweiligen Bedürfnisse angepasste Wahl des Containers die Laufzeit so gering wie möglich zu halten.

Übrigens kann ein Container bis zu size_t Elemente enthalten, solange der Speicher ausreicht.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

27.09.2012, 18:42

Prozessoren arbeiten in der Regel mit festen Wortbreiten. Sprich, die Addition wird meistens eh auf 32- oder 64-Bit breiten Operanden ausgeführt, so dass es total egal ist ob du den Index da irgendwie begrenzt.

Listen Teilen würde nur dann Sinn machen, wenn man oft in ihnen sucht und anhand bestimmter Kriterien schon erkennen kann in welcher Liste das gesuchte ist. Das nennt sich dann aber Baum :P

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

27.09.2012, 19:21

Deswegen habe ich mich halt gefragt ob es einen bemerkbaren Performance Unterschied geben würde, wenn der Zahlenbereich in dem iteriert wird niedriger ist und somit die Bit-Operationen kürzer ausfallen.

Bin mir nicht sicher, was genau du damit meinst. Ein int wird wohl immer gleich schnell sein, egal wie groß die Werte sind, mit denen du rechnest...

Werbeanzeige