zahada delky struktury GCC - vyreseno

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Úterý Březen 12 07:54:02 CET 2024


Tak jsem udelal jeste pokus a skutecne to asi zarovnava struktury a 
jejich velikosti na 64b. Resenim je pridat 32b vypln pred CRC a je to 
vsechno delitelne 8 a v poradku. Dobre vedet ;-)

typedefstruct{
union{
struct{
uint32_tindex;                     // index of configuration, count of 
writes
intgsm_preffered_speed;       // module GSM baudrate
chargsm_apn[32];               // module GSM APN
charcar_ident[8];              // car identification
charcar_aeskey[65];            // 256b -> 64 chars hex encoded
app_data_reservation_treservation;   // reservation data
int32_tgps_last_latitude;         // car last known latitude, *10^7 
(GPS_FIXP_MULT)
int32_tgps_last_longitude;        // car last known longitude, *10^7 
(GPS_FIXP_MULT)
doublex;
doubley;
         };
uint8_tba[CFG_DATA_LEN-8];
     };
uint32_tpadd64;
uint32_tcrc32;
} app_data_cfg_t;
static_assert(sizeof(app_data_cfg_t) ==CFG_DATA_LEN);

Dne 11.03.2024 v 21:09 Jan Waclawek napsal(a):
> sizeof(
> typedef struct {
>    uint8_t  a;
>    uint8_t  b;
>    uint16_t c;
>    uint32_t d;
>    double   x;
> };
> ) = 16 takze asi to zarovnanie co ste pisali.
>
> Tak som vyskusal aj
>
> sizeof(
> typedef struct {
>    double   x;
>    uint8_t  a;
>    uint8_t  b;
>    uint16_t c;
>    uint32_t d;
> };
> ) = 16
>
> Hm.
>
> Ako vravim, ja nepoznam presne tie pravidla propagacie toho zarovanania, a
> ani ich nechcem poznat.
>
> sizeof(
> typedef struct {
>    uint8_t  a;
>    uint8_t  b;
>    double   x;
>    uint16_t c;
>    uint32_t d;
> };
> ) = 24
>
> Ale to sa dalo cakat. Takze v ramci jedneho struct sa zarovnavaju tie
> premenne na svoju sirku. Mozno ten union v tom ma prsty... mozno nie. Fakt
> netusim.
>
> Ale k tomu gcc je k dispozicii aj ta najkompletnejsia dokumentacia...
> (pozdravujem pravovernych Linuxakov ;-) )
>
> wek
>
>
>
> ----- Original Message ---------------
>> Dekuji za vysvetleni, clovek se stale neco uci... to same se tyka i int64_t?
>>
>> A kdyz budu mit
>>
>> struct {
>>      uint8_t    a;
>>      uint8_t    b;
>>      uint16_t c;
>>      uint32_t d;
>>      doube    x;
>> }
>>
>> tak to bude na jakych offsetech ? Zatim bych cekal 0, 1, 2, 4, 8
>>
>> A to zarovnani na 8 se pak tyka cele struktury?
>>
>> No budu to muset prozkoumat.
>>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240312/ca6f3619/attachment.htm>


Další informace o konferenci Hw-list