Ho dichiarato un'unione che alloca 4100 byte alla variabile "sample_union" e ha fatto la stessa dichiarazione di unione come parte di una struttura che alloca 4104 byte.Perché esiste una discrepanza nelle dimensioni tra strutture e unioni?
union test_size_union {
struct {
uint8_t type;
union {
uint8_t count;
uint8_t list;
};
uint16_t rc;
uint16_t arr_value[2048];
};
uint64_t first_dword;
}__attribute__((packed)) sample_union ;
Posizionare l'unione sopra all'interno della struttura alloca 4104 byte.
struct test_size_struct {
union {
struct {
uint8_t type;
union {
uint8_t count;
uint8_t list;
};
uint16_t rc;
uint16_t arr_value[2048];
};
uint64_t first_dword;
};
}__attribute__((packed)) sample_struct;
Beh, questo non è un requisito di progetto, ma vorrei sapere perché il compilatore si comporta in modo diverso per questi due dichiarazione.
versione di gcc: (GCC) 4.9.2, x86_64
Piattaforma: Linux, x86_64
Si noti che le strutture anonime non sono consentite dallo standard C++ (GCC lo fornisce come estensione). – user2079303
Ecco quali sono le funzioni principali: int main (void) { printf ("size of sample_union =% d \ n", sizeof (sample_union)); printf ("dimensione di sample_struct =% d \ n", sizeof (sample_struct)); return 0; } uscita: dimensione sample_union = 4100 dimensione sample_struct = 4104 – user50
@JoachimPileborg: La matrice è di tipo 'uint16_t [2048]', quindi occupa 4096 byte nella maggior parte delle macchine. – DarkDust