Ich habe eine Union, die der Variablen "sample_union" 4100 Bytes zuweist, deklariert und die gleiche Vereinigungsdeklaration als Teil einer Struktur gemacht, die 4104 Bytes zuweist.Warum gibt es eine Größenabweichung zwischen Strukturen und Gewerkschaften?
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 ;
Platzieren der obigen Union innerhalb der Struktur ist 4104 Bytes zuordnen.
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;
Nun, das ist keine Projektanforderung, aber ich würde gerne wissen, warum Compiler anders für diese beide Erklärung verhält.
gcc-Version: (GCC) 4.9.2, x86_64
Plattform: Linux, x86_64
Beachten Sie, dass anonyme Strukturen vom C++ - Standard nicht zugelassen sind (GCC stellt es als Erweiterung bereit). – user2079303
Das, was Hauptfunktionen tut: Int Haupt (void) { printf ("Größe von Beispiel_union =% d \ n", sizeof (Beispiel_union)); printf ("size of sample_struct =% d \ n", sizeof (sample_struct)); Rückgabe 0; } output: Größe sample_union = 4100 Größe sample_struct = 4104 – user50
@JoachimPileborg: Das Array vom Typ 'uint16_t [2048]', so nimmt bis 4096 Bytes auf den meisten Maschinen. – DarkDust