Struktur-Alignment

Gast #6687280
Lesenswert?

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?
#6687520
Lesenswert?

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__));

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren