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