www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM7 32 Bit CPU Variablen


Autor: Christian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

aus meiner 8 Bit Zeit in der alles ganz einfach war, war ich es gewohnt 
zu sparen, Zahlen bis 255 je ein Byte, darüber 2 Byte, mehr gab der 
Compiler eh nicht her. Bits bekamen auch nur ein Bit in einem Struct.

Wie sieht die Sache nun bei einem 32 Bitter aus? Klar, der hat 54kb Ram 
aber asen muss man damit sicherlich nicht. Lohnt es da 1-Byte Variablen 
anzulegen oder werden die durch das Alignment auf 4 Byte aufgeblasen? In 
sehr vielen Programmen findet man durchgehend 32 Bit, egal für was aber 
es muss ja nicht heissen, dass die programmierer da alles richtig 
gemacht haben. Welche Größe bietet die minimale Zugriffszeit?

Gruss,
Christian

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei zig KB RAM ist der Speicherplatzverbrauch von skalaren Daten kaum 
relevant. Interessant ist das erst wenn mehr zusammenkommt, wie bei 
Arrays. Folglich lohnt es sich kaum, bei jeder kleinen Variablen auf 
Deibel komm raus RAM zu sparen.

Alignment lokaler Variablen ist tendentiell das Wort, mindestens wenn 
sie im Register landen. Ansonsten ist das Sache des Compilers oder 
Linkers und kann entsprechend differieren.

Und gerade bei Variablen, die vermutlich ein Weilchen in Registern 
landen, ist alles unterhalb sizeof(int) tendentiell ineffizient, weil 
aufgrund der Sprachdefinition von C ziemlich oft auf "int" erweitert 
wird. Sei es weil es so sein muss, sei es weil der Compiler keinen 
optimalen Code erzeugt. Wenn man ein Byte aus dem Speicher laden muss 
betrifft das lediglich die Wahl des Befehls (gilt für ARM, bei x86 kann 
auch das teurer sein). Im Register hingegen muss man das Byte vor der 
Verarbeitung erst umwandeln und das kostet.

Ergo: Skalare Daten sind als ganze Maschinenworte effizienter. Und das 
gilt nun nicht nur für ARM, sondern weitgehend für alle Architekuren, 
deren Wortbreite für ein "int" ausreicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.