【发布时间】:2011-12-01 20:08:43
【问题描述】:
可能重复:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
Extra bytes when declaring a member of a struct as 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 perk,我如何确保结构的所有字段占据我希望它们占据的数量(我正在向这个结构投射一堆字节)?
【问题讨论】:
标签: c struct x86-64 structure-packing