Forum: PC-Programmierung Struktur Alignment C


von Ilse Koschmidder (Gast)


Lesenswert?

1
char buf[4096] __attribute__ ((aligned(__alignof__(struct ivi_event))));

Hallöchen.

Ich fand den obigen Code anfänglich etwas sperrig und wusste nicht, was 
es damit auf sich hat.

Nach etwas Lektüre weiss ich nun, dass
1
 __attribute__ ;

"allows you to specify special attributes of variables or structure 
fields"

und
1
__alignof__ ;

"allows you to inquire about how an object is aligned;"

bedeuten.

Zu aligned() habe ich nichts gefunden, aber leite mal her, dass dies 
eine Art automatisches Padding bewirkt?! Kann das?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist eine compilerabhängige Erweiterung. Um zu verstehen, was das 
macht, musst Du Dir die Dokumentation Deines Compilers für Deine 
Zielhardware ansehen.

Das sieht sehr nach gcc aus:

https://gcc.gnu.org/onlinedocs/gcc-3.3/gcc/Type-Attributes.html

Und die Kombination aus alignof und aligned lässt annehmen, daß das 
bedeutet, daß "buf" das gleiche Alignment erhalten soll wie die 
Struktur "ivi_event".

von Ilse Koschmidder (Gast)


Lesenswert?

>Und die Kombination aus alignof und aligned lässt annehmen, daß das
>bedeutet, daß "buf" das gleiche Alignment erhalten soll wie die
>Struktur "ivi_event".

Genauso verhält es sich.

>https://gcc.gnu.org/onlinedocs/gcc-3.3/gcc/Type-At...

Habe ich überlesen...

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."

Wer lesen kann, ist klar im Vorteil!

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.