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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.