代码之家  ›  专栏  ›  技术社区  ›  Bharel

Python的结构和处理器的对齐方式[重复]

  •  0
  • Bharel  · 技术社区  · 6 年前

    如果32位处理器按4字节增量对齐,为什么会这样 struct.pack('BH', 1, 2) 在中间添加一个空字节?

    它也没有为更多的数据做好准备,因为另一个字节可以加入地址3-4,并且不占用额外的空间,同时完全是1字节对齐的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mihai Andrei    6 年前

    默认情况下,struct使用平台C编译器使用的约定。您可以告诉struct使用no padding

    this 有关通常对齐方式的说明。

    x86或ARM处理器上基本C数据类型的存储通常不会从内存中的任意字节地址开始。相反,除char之外的每种类型都有对齐要求;字符可以从任何字节地址开始,但2字节短字符必须从偶数地址开始,4字节整数或浮点字符必须从可被4整除的地址开始,8字节长字符或双字符必须从可被8整除的地址开始。有符号和无符号没有区别。