ARM7 32 Bit CPU Variablen

Gast #1228514
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.