10
私は4100バイトを変数 "sample_union"に割り当てて宣言し、同じユニオン宣言を4104バイトを割り当てる構造体の一部として作成しました。構造体と共用体の間にサイズの不一致があるのはなぜですか?
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 ;
上記の共用体を構造体内に配置すると、4104バイトが割り当てられます。
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;
これはプロジェクトの要件ではありませんが、コンパイラがこの2つの宣言に対して異なる動作をする理由を知りたいと思います。
gccのバージョン:(GCC)4.9.2、x86_64版
プラットフォーム:Linuxでは、x86_64版は
あなたは、構造体の内側に労働組合を置い
匿名の構造体はC++標準では許可されていないことに注意してください(GCCはそれを拡張子として提供しています)。 – user2079303
これは主な機能です: int main(void) { printf( "size of sample_union =%d \ n"、sizeof(sample_union)));printf( "size of sample_struct =%d \ n"、sizeof(sample_struct)); return 0; }出力:sample_struct = 4104 – user50
@JoachimPileborgのsample_union = 4100 サイズの大きさ:アレイタイプである 'uint16_t [2048]'ので、ほとんどのマシン上で4096バイトを占めます。 – DarkDust