【问题标题】:What is "Alignment" field in binary formats? Why is it needed?什么是二进制格式的“对齐”字段?为什么需要它?
【发布时间】:2010-03-06 08:27:22
【问题描述】:
在 ELF 文件格式中,我们在 Segment Header Table aka Program Header Table 中有一个 Alignment 字段。
如果是 Windows PE 文件格式,他们会将其提升到下一个级别,Sections 有两个对齐值,一个在磁盘文件中,另一个在内存中。 PE 文件头指定了这两个值。
我对这种对齐方式一无所知。我们需要它做什么?如何以及在哪里使用它?同样,我不知道二进制文件格式上下文中的对齐是什么,但我们为什么需要它?
【问题讨论】:
标签:
linker
loader
binaryfiles
elf
portable-executable
【解决方案1】:
好吧,对齐通常是拉伸某个值的存储大小以占用一些“圆形”空间,例如 32、64、128 位等。
如果我们谈论的是二进制格式,可能是为了优化格式处理。当您读/写一些“圆形”数据长度部分时,读/写操作会更快。
我为你找到了一个读物,用我现在能想到的更好的词来表达:
Data structure alignment
数据结构对齐是数据在计算机内存中的排列和访问方式。它由两个独立但相关的问题组成:数据对齐和数据结构填充。当现代计算机读取或写入内存地址时,它将以字大小的块(例如 32 位系统上的 4 字节块)执行此操作。 数据对齐意味着将数据放置在等于字大小的某个倍数的内存偏移处,由于 CPU 处理内存的方式,这会提高系统的性能。为了对齐数据,可能需要在上一个数据结构的结尾和下一个数据结构的开头之间插入一些无意义的字节,即数据结构填充。