Forum: PC-Programmierung C/ - Struktur- Alignment


von PicNeuling (Gast)


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

von Karl H. (kbuchegg)


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.

von Arne (Gast)


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)

von PicNeuling (Gast)


Lesenswert?

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

MfG

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.