Performance mit Structures

OP #3409435
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
#3409487
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.