Python struct.calcsize计算结果不符预期?是误解还是BUG?
问题解答:struct.calcsize("hl")返回8而非6的原因
这不是struct模块的BUG,是你忽略了内存字节对齐的机制——这是大多数系统为了提升内存访问效率默认采用的行为。
具体原因:
- 在你的Windows平台上,struct模块默认使用native字节顺序和对齐规则。对于
hl这个组合类型,成员中最大的基本类型是long(l),占4字节,所以整个结构体的大小会被对齐到4的整数倍。 - short(
h)占2字节,为了满足对齐要求,会在它后面自动填充2字节的空数据,再加上long的4字节,总大小就是2+2+4=8字节。
如何得到预期的6字节?
如果你不需要自动对齐,可以在格式字符串前加上=,强制使用标准大小和无对齐模式:
import struct struct.calcsize("=hl") # 输出6
补充说明:
单独计算h和l时返回正确的字节数,是因为单个类型不存在跨成员的对齐需求,只有当多个类型组合成结构体时,才会触发对齐填充逻辑。
内容的提问来源于stack exchange,提问作者Bernd Wechner
相关产品推荐
相关产品推荐

