为什么数据结构对齐对性能很重要?

问题描述 投票:27回答:4

有人可以给我一个简短而合理的解释,说明为什么编译器向数据结构中添加填充以对齐其成员?我知道这样做是为了使CPU可以更有效地访问数据,但是我不明白为什么会这样。

并且如果这仅与CPU相关,为什么在Linux中将双4字节对齐并在Windows中将8字节对齐?

performance alignment memory-alignment abi
4个回答
16
投票

对齐方式有助于CPU以高效的方式从内存中获取数据:更少的缓存丢失/刷新,更少的总线事务等。>

某些存储器类型(例如RDRAM,DRAM等)需要以结构化的方式(对齐的“字”和“突发事务”,即一次多个字)进行访问,以产生有效的结果。这是由于其中的许多原因:

  1. 设置时间:存储设备访问存储位置所花费的时间
  2. 总线仲裁开销,即许多设备可能想要访问存储设备
  3. “ Padding”用于校正数据结构的对齐方式,以优化传输效率。


换句话说,访问“未对齐”的结构将导致较低的总体性能。这种陷阱的一个很好的例子:假设数据结构未对齐,并且要求CPU /内存控制器执行2次总线事务(而不是1次)以获取所述结构,因此性能会降低。


12
投票

CPU以4个字节为一组从内存中获取数据(实际上取决于硬件的硬件类型(对于某些类型的硬件,它是8或其他值,但是为了简化起见,请坚持4),如果数据以可被4整除的地址开头,则一切都很好,CPU会转到内存地址并加载数据。


7
投票

缓存行是缓存的基本单位。通常,它是16-64字节或更多。


3
投票

除了jldupont的答案,有些架构还具有加载和存储指令(用于读取和写入内存的指令),这些指令only

© www.soinside.com 2019 - 2024. All rights reserved.