Was ist Ausrichtung und Auffüllung (Alignment und Padding)?

Das Ablegen von Daten an Adressen, die ein Vielfaches einer typabhängigen Zahl sind (Alignment), und die dafür zwischen oder hinter den Daten eingefügten ungenutzten Bytes (Padding, Füllbytes). In einer Umgebung, in der int an 4-Byte-Grenzen ausgerichtet wird, folgen in struct { char c; int i; char d; } auf c 3 Byte und auf d 3 Byte, sodass die Größe 12 Byte beträgt. Zugriffe auf nicht ausgerichtete Adressen sind je nach CPU langsamer oder lösen eine Ausnahme aus. Ordnet man die Member vom größten Typ abwärts an, lässt sich das Padding verringern.

Japanische Bezeichnung: アライメントとパディング

„Ausrichtung und Auffüllung (Alignment und Padding)“ kommt in 2 Übungsfragen aus 2 Themen vor, z. B. Befehlssatz und Assembler, Grundlagen der Programmiersprache C.

Fachgebiet: Grundlagen der Programmiersprache C

Jetzt üben: Fragen zu Ausrichtung und Auffüllung (Alignment und Padding)

Was kann geschehen, wenn bei RISC-V die Adresse des lw-Befehls, der 4 Byte liest, kein Vielfaches von 4 ist (nicht ausgerichtet)?

  1. ADer Befehl wird automatisch auf das nächste Vielfache von 4 umgedeutet und liest stets gleich schnell und korrekt
  2. BJe nach CPU-Implementierung tritt eine Ausnahme auf, oder der Zugriff wird in Hardware oder Software behandelt und ist sehr langsam
  3. CDie unteren 2 Bit der Adresse werden ignoriert, und es gibt keinen Fehler
Antwort und Erläuterung anzeigen

Antwort: B. Je nach CPU-Implementierung tritt eine Ausnahme auf, oder der Zugriff wird in Hardware oder Software behandelt und ist sehr langsam

4-Byte-Daten an einer Adresse, die ein Vielfaches von 4 ist, lassen sich mit einem Speicherzugriff lesen. Überschreiten sie eine Grenze, sind zwei Zugriffe nötig; RISC-V überlässt es der Implementierung, nicht ausgerichtete Zugriffe in der Schaltung zu behandeln oder eine Ausnahme auszulösen und der Software zu überlassen. Im zweiten Fall ist der Zugriff um Größenordnungen langsamer. Deshalb fügen Compiler zwischen Strukturelementen Füllbytes (Padding) zur Ausrichtung ein.

„Ausrichtung und Auffüllung (Alignment und Padding)“ in den Erläuterungen

Fragen mit „Ausrichtung und Auffüllung (Alignment und Padding)“ (2)

  1. Was kann geschehen, wenn bei RISC-V die Adresse des lw-Befehls, der 4 Byte liest, kein Vielfaches von 4 ist (nicht ausgerichtet)?
  2. char habe 1 Byte und int 4 Byte, und int werde wie in üblichen Umgebungen an Adressen ausgerichtet, die ein Vielfaches von 4 sind. Welche Ausgabe erzeugt der obige Code bei der Ausführung?

Verwandte Begriffe

Struct (C-Struktur) Array Bitfeld Dangling Pointer (hängender Zeiger) Dynamische Speicherreservierung Funktionszeiger Integer-Promotion Makro Präprozessor Pufferüberlauf (Buffer Overflow)

Zur Glossarübersicht