可能重复:
为什么结构的 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
特权,我如何确保结构的所有字段占据我希望它们占据的数量(我正在向这个结构投射一堆字节)?