重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?
構造体のメンバーを uint32_t として宣言するときの余分なバイト
何らかの理由で、sizeof
演算子はこの構造体に対して偽のサイズを返します (48
ではなく40
):
typedef struct mbdb_file_info {
uint16_t mode;
uint32_t unk0;
uint32_t unk1;
uint32_t user_id;
uint32_t group_id;
uint32_t time0;
uint32_t time1;
uint32_t time2;
uint64_t length;
uint8_t flag;
uint8_t property_count;
} mbdb_file_info;
だからここに簡単なテストがあります:
printf("%ld %ld %ld %ld: %ld", sizeof(uint8_t),
sizeof(uint16_t),
sizeof(uint32_t),
sizeof(uint64_t),
sizeof(mbdb_file_info));
どちらが印刷されますか:
1 2 4 8:48
これはどのように起こりますか?すべてのサイズを合計すると40
、 ではなくになり48
ます。は一体どこ48
から来るのでしょうか?
そして、それが奇妙なx86-64
特典である場合、構造体のすべてのフィールドが占有したい量を確実に占有するようにするにはどうすればよいですか (この構造体に大量のバイトをキャストしています)。