如果32位处理器按4字节增量对齐,为什么会这样 struct.pack('BH', 1, 2) 在中间添加一个空字节?
struct.pack('BH', 1, 2)
它也没有为更多的数据做好准备,因为另一个字节可以加入地址3-4,并且不占用额外的空间,同时完全是1字节对齐的。
默认情况下,struct使用平台C编译器使用的约定。您可以告诉struct使用no padding
this 有关通常对齐方式的说明。
x86或ARM处理器上基本C数据类型的存储通常不会从内存中的任意字节地址开始。相反,除char之外的每种类型都有对齐要求;字符可以从任何字节地址开始,但2字节短字符必须从偶数地址开始,4字节整数或浮点字符必须从可被4整除的地址开始,8字节长字符或双字符必须从可被8整除的地址开始。有符号和无符号没有区别。