CK schrieb:
> Wenn man die Möglichkeit hat, sollte man in einem Struct zuerst mit den
> 4 Byte großen Variablen, beginnen, gefolgt von den 2 Byte und Anschluss
> mit den 1 Byte Variablen, dann hat man das Problem nie.
Ist es wirklich so?
Da will jemand 10 Bytes für seine Struct haben und diese dann auch mal
byteweise durchlaufen.
Dann packt er alles geschickt und geordnet:
1 | struct test {
|
2 | float f;
|
3 | char ch1;
|
4 | char ch2;
|
5 | char str[4];
|
6 | };
|
7 |
|
8 | printf("size: %zu\n", sizeof(struct test));
|
9 | printf("alignment: %zu\n", _Alignof(struct test));
|
Und trotzdem braucht diese Struktur 12 Bytes (oder 16, oder 20, ...).
Man kann ja auch ein Array erzeugen:
Darum müssen die Adressen ein Vielfache von 4 sein. Was ja bei einer
Größe von 10 Bytes nicht der Fall wäre.
Man kann das mit __packed umgehen.
CK schrieb:
> Mit packed, sind die Elemente nicht mehr align und der Zugriff auf diese
> Elemente dauert länger.
Würde er für die Structur 4*x Bytes (ein Vielfaches von 4) benötigen,
dann würde es wohl auch ohne __packed gehen.