【问题标题】:Why processor read only aligned addresses为什么处理器只读对齐地址
【发布时间】:2017-05-06 04:54:47
【问题描述】:

所以我读了几篇关于内存对齐的文章(以及关于 StackOverflow 的几个问题),我明白为什么会有这样的结构:

struct A
{
  char c;
  int i;
}

会有内边距。 同样很明显,如果处理器只能从对齐的偏移量中读取,则从未对齐的内存中获取会更慢。

但是为什么处理器只能从对齐的内存中读取呢?为什么它不能从随机地址读取数据?你知道,从随机存取存储器...

【问题讨论】:

    标签: memory alignment processor


    【解决方案1】:

    我依赖于处理器。一些处理器根本不允许非对齐访问。其他处理器可以,但速度往往较慢。

    在您的示例中(如果字段被打包并且允许未对齐访问,如果处理器尝试读取 i,它通常需要从内存中获取它。

    某些处理器会因多次访问而导致性能下降,以检索未对齐的数据。其他人根本不允许。

    【讨论】:

    • 是的,但是为什么处理器需要在地址未对齐时多次获取? RAM只是一组晶体管,为什么它不能从任何地址读取数据到寄存器呢?
    【解决方案2】:

    处理器针对最常见的用例进行了优化:当数据正确对齐时。这就是为什么首选对齐读取的原因。

    但这并不能回答您的问题。是什么让对齐阅读更有效?

    答案是,现代处理器不喜欢从内存中读取。他们从缓存中读取速度要快几个数量级。

    那些使用缓存行组织的缓存。典型的高速缓存行是 64 字节,您可以读取精确值 here。当您读取对齐的值时,可以保证小于或等于缓存行的值将在单个缓存行中。对于未对齐的值,可能部分值在缓存中,而其他部分只能从 RAM 访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2015-06-13
      • 2011-03-15
      相关资源
      最近更新 更多