【问题标题】:Python's struct and processor's alignment [duplicate]Python的结构和处理器的对齐[重复]
【发布时间】:2019-02-04 10:32:30
【问题描述】:

我在维基百科和这里的一些关于处理器对齐的堆栈溢出的答案中都阅读过,但有一点我不明白:

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

short 不会以可被 4 整除的地址为边界(只能被 2 整除),当处理器读取一个字时,无论是在中间还是在末尾,它都会读取所有 4 个字节.

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

【问题讨论】:

    标签: python python-3.x struct memory-alignment


    【解决方案1】:

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

    请参阅this 以了解通常的对齐方式。

    x86 或 ARM 处理器上基本 C 数据类型的存储通常不会从内存中的任意字节地址开始。相反,除 char 之外的每种类型都有对齐要求。 chars 可以从任何字节地址开始,但 2 字节 short 必须从偶数地址开始,4 字节 int 或 float 必须从可被 4 整除的地址开始,8 字节 long 或 double 必须从可被 8 整除的地址开始. 签名或未签名没有区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多