"sample_union" değişkenine 4100 bayt ayıran bir birlik bildirdim ve 4104 bayt ayıran bir yapının parçası olarak aynı birliği bildirimi yaptı.Yapılar ve sendikalar arasında neden bir uyumsuzluk var?
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 ;
Yukarıdaki birleşimi iç yapının içine yerleştirmek 4104 bayt ayırıyor.
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;
Eh, bu proje gereklilik değildir, ama derleyici bu iki beyanı için farklı davranmadığı neden bilmek istiyorum.
gcc version: (GCC) 4.9.2, x86_64
Platform: Linux x86_64
Eğer yapı içine birliği yerleştirilen
Anonim yapıların C++ standardı tarafından izin verilmediğini unutmayın (GCC bunu bir uzantı olarak sağlar). – user2079303
Bu temel işlevler: int main (void) { printf ("sample_union boyutu =% d \ n", sizeof (sample_union)); printf ("sample_struct boyutu =% d \ n", sizeof (sample_struct)); geri dönüş 0; } çıkışı: sample_union arasında boyutu = 4100 sample_struct = 4104 – user50
@JoachimPileborg arasında boyutu: dizi, [2048] 'uint16_t 'tiptedir bu yüzden çoğu makinelerde 4096 bayt alır. – DarkDust