Hallo, eine Frage an den Experten. Bezieht sich der folgende Ausdruck nur auf den Start der Struktur oder auf jeden Member? typedef struct attribute((aligned)) Internet: struct S { short f[3]; } attribute ((aligned (8))); "force the compiler to insure (as far as it can) that each variable whose type is struct S will be allocated and aligned at least on a 8-byte boundary." Aber wie verhält es sich in diesem Fall: struct S { short f1[3]; short f2[3];} attribute ((aligned (8))); Wo kommt f2 zu liegen? Wird innerhalb der Struktur auf das alignment aufgefüllt oder nur am Ende?
Ratloser schrieb: > Bezieht sich der folgende Ausdruck nur auf > den Start der Struktur oder auf jeden Member? > > typedef struct attribute((aligned)) Das bezieht sich auf die Struktur, wo diese beginnt. Ratloser schrieb: > Wo kommt f2 zu liegen? Wird innerhalb der Struktur auf das alignment > aufgefüllt oder nur am Ende? Das hat nichts mit oberem zu tun, das was du hier meinst wäre:
1 | struct __attribute__ ((__packed__)) |
https://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/Type-Attributes.html Bsp.
1 | // Hier werden hinter "a" 3-Byte leer gelassen.
|
2 | struct S |
3 | {
|
4 | uint8_t a; |
5 | uint32_t b; |
6 | };
|
7 | |
8 | // Hier folgt b direkt hinter a
|
9 | struct S |
10 | {
|
11 | uint8_t a; |
12 | uint32_t b; |
13 | } __attribute__ ((__packed__)); |
:
Bearbeitet durch User
Adam P. schrieb: > // Hier werden hinter "a" 3-Byte leer gelassen. > struct S > { > uint8_t a; > uint32_t b; > }; Sicher? Ich würde das nur bei
1 | struct S |
2 | {
|
3 | uint32_t b; |
4 | uint8_t a; |
5 | };
|
behaupten. ;-)
MaWin schrieb: > Ich würde das nur beistruct S > { > uint32_t b; > uint8_t a; > }; > behaupten. ;-) Und damit mal wieder falsch liegen. Warum sollten hier hinter a 3 Byte "leer gelassen" werden?
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.