C++ Gegenseitige Abhängigkeiten bei Vererbung

Ich weiß das ist natürlich schon "premature optimization" aber es interessiert mich auch einfach.
Mit #7 hab ich zumindest schon eine funktionierende Variante (das überflüssige Erben von Data natürlich noch weg).

Was mich nur gedanklich so beschäftigt hat ist eben, dass jeder einzelne Zugriff auf die Daten über den Pfeil-Operator angesprochen wird.
In den Modulfunktionen kommen Zugriffe auf die Daten permanent vor zB hat man voraussichtlich in einer Funktion zwischen 20 und 200 Variablenzugriffe. Jetzt hab ich viele dieser Funktionen und diese werden bei jedem Datenpunkt (und davon gibt es Millionen) jedes mal ausgeführt.

Wenn ich zB mal bei https://godbolt.org/ gucke dann sieht man (wenn ich es dort richtig interpretiere), dass die Zugriffe sich für die CPU in der Anzahl der Aktionen unterscheiden.

test = 5; // erzeugt:
mov DWORD PTR [rbp-12], 5

*ptest = 5; // erzeugt:
mov rax, QWORD PTR [rbp-8]
mov DWORD PTR [rax], 5

Der Zugriff ohne Pointer ist eine Aktion und mit Pointer 2 Aktionen. Das heißt doppelt so viel. Da permanente Zugriffe die Hauptaktivität des Programmes sind denke ich schon das auch diese Verdopplung irgendwie eine Auswirkung hat. Dies sind eigentlich nur die Gedanken dahinter mal nach einer weiteren Möglichkeit zu gucken.
 
Cool das freut mich richtig. Man muss beim Test aber volatile für die ein oder andere Variable nehmen sonst bleibt gar nichts übrig. Ich hab es auch mal mit der Zielvariante also ->Operator vs direktMemberZugriff probiert, sieht fast identisch aus und ist jeweils eine Zeile (wenn ich das dort alles richtig interpretiere). Der Unterschied zwischen Optimiert und Unoptimiert ist was generell Code angeht echt gewaltig das hätte ich nie gedacht wie viel der Compiler da minimiert. In diesem Sinne vergiss "premature optimization" nimm einfach -O3 :daumen:
 
Und nachdem du eine funktionierende Variante hast, time die doch erst mal. Gut möglich, dass du dann bspw. feststellst, dass 70% der Laufzeit mit Öffnen und Einlesen deiner .csv-Dateien verbracht werden. Oder wieder was ganz anderes.
 
  • Gefällt mir
Reaktionen: kuddlmuddl
In diesem Sinne vergiss "premature optimization" nimm einfach -O3
Nimms es bitte nicht persönlich, aber genau das denke ich ganz oft bei deinen Threads, die du hier aufmachst. Man versteht mit Mühe was du eigtl versuchst und am Ende dreht es sich jedes mal um 'ich glaube, dass es schneller ist, wenn ich es super kompliziert mache'.

Premature optimization ist imho (neben dem Feature-Overengineeren) die häufigste Krankheit aller C++ Programmierer ;) Hab schon mehrere Projekte in großen Firmen erlebt, die genau wegen dieser zwei Punkte komplett scheitern und niemals fertig werden.
 
Kein Thema, gute Kritik finde ich immer super, mein Coding ist nur selbst beigebracht deswegen erstelle ich bei solchen Gedanken solche Threads um zu lernen und mir konstruktiv die Löffel lang ziehen zu lassen ;) (Wobei ich jetzt auch nicht so oft Performance als Thema habe).

Interessant das premature optimization bei C++ so verbreitet ist, dabei erzeugt die Sprache sowieso von Grund auf ziemlich schnelle Programme. Vielleicht ist es auch die große Vielfalt welche die Sprache bietet, was die Leute dazu bringt mehr Zeit mit dem Überlegen von Möglichkeiten zu verbringen. Bei mir ist es zumindest manchmal so, ich beherrsche sicherlich nur Teile der Sprache ausreichend gut und denke dann hin und wieder, da gibt es sicher noch ein Weg den ich nicht kenne und vielleicht ist der besser ;)
 
T_55 schrieb:
Interessant das premature optimization bei C++ so verbreitet ist, dabei erzeugt die Sprache sowieso von Grund auf ziemlich schnelle Programme.
Ich vermute genau deswegen. 'C++ ist doch schnell' haben viele im Hinterkopf und denken sich 'schneller = besser', was natürlich auf viele verschiedene Arten falsch ist.
Besser heißt eher mehr 'SOLID' = einfacher in der Wartung und einfacher zu erweitern. 'Schneller' macht man, sobald man weiß, dass es faktisch zu langsam ist und die zu langsame Stelle identifiziert hat, nicht weil 'das hier könnte vllt irgendwann zu langsam werden'.
 
  • Gefällt mir
Reaktionen: kuddlmuddl und BlackMark
Apropos statics:
 
  • Gefällt mir
Reaktionen: T_55
Zurück
Oben