Forum: Compiler & IDEs Performance mit Structures


von David H. (davidm)


Lesenswert?

Ich habe nun eine ganze weile mit structures rumgespielt
und habe einige Fragen.

Ist es ein Problem structures in kombination mit volatile zu verwenden?
oder gar in Interrupt Routinen?

Sehen wir uns mal folgende structure/union an (Microchip PIC32)
1
static union _sum
2
    {
3
        WORD w[2];
4
  DWORD dw;
5
    } sum;
6
7
// Unterscheidet sich dies in irgend einer Weise von?:
8
// (wir vergessen mal das es eine union ist)
9
10
 WORD w[2];
11
 DWORD dw;
12
13
// oder:
14
 BYTE a;
15
 BYTE b;
16
 BYTE c;
17
 BYTE d;


Was von den drei Möglichkeiten geht wohl am schnellsten?
1
x = a; // würde doch am ende genauso das 32 Bit register lesen und dann sich das eine Byte da irgendwie raus mogeln.
2
3
x = dw; // Liest das ganze 32 Bit register und mogelt nichts mehr
4
5
x = sum.dw; // Liest genauso 32 Bit, und dann?
6
7
x= sum.w[1] // Liest 32 Bit und schneidet 16 Bit weg

von Karl H. (kbuchegg)


Lesenswert?

Eine Struktur ist letzt Endes ein Hilfsmittel für den Programmierer um 
seine Daten organisieren zu können. Geh da nicht mit dem Performance 
Gedanken rann, denn im wesentlichen kommt es immer aufs gleiche raus.
Ob du selbst jetzt 64 Bytes durch die Gegend kopierst indem du einen 
Haufen Variablenzuweisungen machst, oder ob du dieselben 64 Bytes durch 
die Gegend kopierst, indem diese 64 Bytes in einer Struktur organisiert 
sind, ist Jacke wie Hose.

Bei Paramaterübergaben hat man mit Strukturen meist leichte Vorteile, 
weil
a) die Argumentlisten dadurch kleiner werden
b) bei vernünftiger Organisation nicht mehr 5 Variablen über die 
Argumentschnittstelle in eine Funktion reinkopiert werden, sondern 
einfach nur ein Pointer auf ein entsprechendes Strukturobjekt kopiert 
wird.

Aber sieh Strukturen in erster Linie als DEIN Werkzeug zur 
Organisation und Strukturierung von Daten an. Wenn die vernünftig ist, 
dann kommt akzeptable Performance ganz von alleine.
Und hör mit Mikrooptimierungen auf. Performance holt man sich in erster 
Linie auf algorithmischer Ebene. Um Mikrooptimierungen kümmert sich der 
Compiler.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.