什么是二进制格式的“对齐”字段?为什么需要它?

cla*_*aws 5 linker binaryfiles elf loader portable-executable

ELF文件格式中,我们有一个Alignment字段,Segment Header TableProgram Header Table.

在 Windows PE 文件格式的情况下,他们将其带到下一个级别,节有两个对齐值,一个在磁盘文件中,另一个在内存中。PE 文件头指定了这两个值。

我对这种对齐一无所知。我们需要它做什么?如何以及在哪里使用它?同样,我不知道什么是二进制文件格式上下文中的对齐,但我们为什么需要它?

小智 5

对齐通常是拉伸某个值的存储大小以占据一些“圆形”空间,例如 32、64、128 位等。

如果我们谈论二进制格式,则可能是为了优化格式处理。当您读/写一些“圆形”数据长度部分时,读/写操作可能会更快。

我为你找到了一本读物,用我现在能想出的更好的词语来表述:

数据结构对齐

数据结构对齐是数据在计算机内存中排列和访问的方式。它由两个独立但相关的问题组成:数据对齐数据结构填充。当现代计算机读取或写入内存地址时,它将以字大小的块(例如,32 位系统上的 4 字节块)执行此操作。数据对齐意味着将数据放置在等于字大小的某个倍数的内存偏移处,这会由于 CPU 处理内存的方式而提高系统的性能。为了对齐数据,可能需要在最后一个数据结构的末尾和下一个数据结构的开头之间插入一些无意义的字节,这就是数据结构填充