Forum: Mikrocontroller und Digitale Elektronik ARM7 32 Bit CPU Variablen


von Christian J. (Gast)


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

von (prx) A. K. (prx)


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.

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.