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