zahada delky struktury GCC

Jan Waclawek konfera na efton.sk
Pondělí Březen 11 20:33:22 CET 2024


Pri ne-packed strukturach je sposob usporiadania prvkov structu ciste na
prekladaci. gcc nie je konkretny prekladac, a to zarovnanie zavisi od asi
pol miliona faktorov - verzie, prepinacov pouzitych pri preklade gcc,
prepinacov pouzitych pri preklade cieloveho programu, fazy mesiaca a jeho
polohy voci Jupiteru a roznych inych divych svini pobehujucich naokolo.

Nie zeby pre packed to bolo omnoho lepsie.

V kazdom pripade som skusil nejaky nahodny gcc pre Cortex-M4 co s nim prave
robim, a ano, zreprodukoval som to.

Dovod je, ze ten double vnuti alignment 8 pre kazdy prvok pola, t.j. sa
bude kazdy prvok zarovnavat na ofset delitelny bezo zvysku 8. 1020 taky
nie je, takze za ten union sa pridaju 4 padding byty aby crc32 vyslo na
offset 1024, no a on sam ma 4 byty a ze neho sa daju este dalsie 4 padding
bity.

Inaksie povedane, bez packingu to nevlozite s double tak, aby bolo to crc32
na poslednych 4 bytoch. Da sa ba[] urobit dlhy 1016, a to crc proste bude
8 bytov od konca, t.j. to bude binarne nekompatibilne s tou verziou bez
double. 

Ale inak je to takmer jedno, lebo aj tak su vsetky polia rozposuvane oproti
tej verzii presne kvoli tomu zarovnaniu na 8 byte.

wek


----- Original Message ---------------
>union...
>jde o to, ze potrebuju, aby struktura mela vzdy 1024B a CRC na konci, 
>dorovnava to ba a cekal jsem ze problem bude jen v pripade, kdyz se tam 
>funkcni polozky uz nevejdou...



Další informace o konferenci Hw-list