Python的结构和处理器的对齐[重复]
Posted
技术标签:
【中文标题】Python的结构和处理器的对齐[重复]【英文标题】:Python's struct and processor's alignment [duplicate] 【发布时间】:2019-02-04 10:32:30 【问题描述】:我在***和这里的一些关于处理器对齐的堆栈溢出的答案中都阅读过,但有一点我不明白:
如果 32 位处理器对齐到 4 个字节增量,为什么 struct.pack('BH', 1, 2)
会在中间添加一个空字节?
short 不会以可被 4 整除的地址为边界(只能被 2 整除),当处理器读取一个字时,无论是在中间还是在末尾,它都会读取所有 4 个字节.
它也没有为更多数据做好准备,因为另一个字节可以加入地址 3-4 并且不占用额外空间,同时完美地 1 字节对齐。
【问题讨论】:
【参考方案1】:默认情况下,struct 使用平台 C 编译器使用的约定。你可以告诉 struct 不使用padding
请参阅this 以了解通常的对齐方式。
x86 或 ARM 处理器上基本 C 数据类型的存储通常不会从内存中的任意字节地址开始。相反,除 char 之外的每种类型都有对齐要求。 chars 可以从任何字节地址开始,但 2 字节 short 必须从偶数地址开始,4 字节 int 或 float 必须从可被 4 整除的地址开始,8 字节 long 或 double 必须从可被 8 整除的地址开始. 签名或未签名没有区别。
【讨论】:
以上是关于Python的结构和处理器的对齐[重复]的主要内容,如果未能解决你的问题,请参考以下文章