mikrocontroller.net

Forum: PC-Programmierung C/ - Struktur- Alignment


Autor: PicNeuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

ich bin gerade am Lernen für eine C- Klausur und kam auf die Frage:

Was ist ein Strukturalignment?

Das hab ich noch nirgends gehört und auch nicht adäqutes in der Hilfe 
oder Google gefunden.


Kann mir vielleicht jemand auf die Sprünge helfen!?

Vielen Dank schonmal

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PicNeuling schrieb:
> Hallo an alle,
>
> ich bin gerade am Lernen für eine C- Klausur und kam auf die Frage:
>
> Was ist ein Strukturalignment?
>
> Das hab ich noch nirgends gehört und auch nicht adäqutes in der Hilfe
> oder Google gefunden.

Beim Alignment geht es darum, dass manche Prozessoren zb nicht auf 
ungerade Adressen zugreifen können. Andere wiederrum können das, aber 
nur unter erhöhter Laufzeit. Bei wiederrum anderen ist es völlig egal.

Hast du jetzt zb einen Prozessor, der von einer ungeraden Adresse nicht 
lesen kann, dann wird es logischerweise sinnvoll sein, alle Variablen so 
auszurichten, dass jede Variable an einer geraden Speicheradresse liegt.

In einer Struktur
struct test {
  unsigned char i;
  unsigned char j;
};

wird es daher sinnvoll sein, zwischen i und j 1 zusätzliches Byte 
einzuschieben und dafür zu sorgen, dass so eine Strukturvariable als 
Ganzes an einer geraden Speicheradresse liegt. Auch wird ein Compiler, 
der auf das Alignment aufpassen muss, hinter j noch ein weiteres 
zusätzliches Byte einschieben, um die sizeof() der kompletten Struktur 
wieder auf eine gerade Zahl anzuheben. Das ist zb wichtig, wenn Arrays 
aus diesen Strukturen gebaut werden.

Damit kann der Prozessor immer maximal schnell zugreifen. i als erstes 
Member der Struktur liegt an einer geraden Speicheradresse (durch das 
Alignment der ganzen Struktur garantiert) und j ebenfalls (durch das 
zwischen i und j eingeschobene Byte garantiert). Die eingeschobenen 
Bytes nennt man 'Padding Bytes' und die Ausrichtung der ganzen Struktur 
ist das Strukturalignment.

Alignment ist einfach nur der englische Begriff für Ausrichtung. Gemeint 
ist damit die Ausrichtung von 'Objekten' im Speicher in Bezug auf die 
Adressierbarkeit. Interessant ist das nur, wenn es Einschränkungen in 
der Adressierbarkeit gibt, die sich dann in Alignment-Restriktionen 
niederschlagen, die der Compiler berücksichtigen muss.

Autor: Arne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit könnte gemeint sein, dass ein struct z.B. immer an einer glatt 
durch 2, 4 oder 8 teilbaren Adresse beginnt. Könnte sich aber auch auf 
das Alignment der Membervariablen des structs beziehen (Stichwort: 
padding bytes)

Autor: PicNeuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow Vielen Dank, das war echt mal eine schnelle, perfekt erlärende 
Antwort!

MfG

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.