TS: Zeiger Wettrennen

Beitrag lesen

Hello,

Hello,

ich hätte dazu mehrere Fragen:

  1. Wie lange soll die Liste bestehen? Wird sie während ihrer Lebensdauer mehrfach durchsucht?
  2. Ist die Liste sortiert, bzw. indiziert?
  3. Um welche Datentypen handelt es sich? Sind diese ggf. sogar ordinal?
  4. Könntest Du die Liste als (balancierten) Baum aufbauen?

Ja, sowas lernt man in der Schule.

Warum nutzt Du das Schulwissen dann nicht?

Mehrere Zeiger hat mMn keinen Nutzen.

Doch, haben sie. Das zeigt die Praxis.

Das kannst Du zwar behaupten, aber solange Du nicht alle Randbedingungen nennst, ist diese Behauptung unseriös. In einem single-threaded System bringen mehrere Zeiger (in je einer eigenen Funktion) für eine Einzelwertsuche keinen Vorteil, weil ihre Funktionsblöcke hübsch serialisiert abgearbeitet werden. Alles andere ist Statistik und hängt stark von der Reihenfolge (Sortierung) der Werte in der Kette ab. Eine belastbare Aussage ist also erst nach vielen Versuchen mit jeweils neu umsortierter Kette möglich.

Und selbst wenn Du die PIQ moderner von Neumann-Syteme berücksichtigst, in der ja eine Tranformation nach Hewlett-Packard-Architektur durchgeführt wird, stehen die prefetched Commands und die Daten wieder brav hintereinander in ihren L1-Caches. Da wird - gottbewahre - nichts umsortiert.

Als Anregung könntest Du dir mal im Reverse Engeneering anschauen, wie PHP das mit seinen "Array"-Strukturen macht. Das sind verschachtelte (sortierte) Listen von Hashes der Werte. Wo das eigentliche Datenelement dann im Speicher liegt, ist sekundär.

In C ist das genau andersherum. Also in PHP und auch in Perl heißt Random Access Zugriff auf Datenstrukturen. In C jedoch heißt Random Access in erster Linie Speicheradressierung.

Nach wievielen indirekten Zugriffen der eine direkte auf die Daten erfolgt, ist sicherlich wichtig. Aber auf den Speicher wird dabei immer zugegriffen. Da kann sich die PIQ aber durchaus auswirken.

Array's in C sind überhaupt kein Problem: Wenn man einen numerischen Index nutzen kann. Was C jedoch nicht kennt sind assoziative Datenstrukturen (Hashes).

Natürlich kann man sich auch in C einen Hash bauen wenn man für seine Schlüssel einen Hashalgorithmus hat. Das kostet aber auch CPU und damit Zeit, einen solchen Algorithmus zu implementieren, lohnt sich also auch nur unter bestimmten Umständen, z.B. dann wenn Daten persistent im Hauptspeicher liegen (was in meiner Anwendung nicht der Fall ist).

Da überschaust Du nun deine eigene Aufgabenstellung nicht vollständig.

Deshalb beantworte doch bitte erst einmal meine Fragen.

Glück Auf
Tom vom Berg

--
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.