【问题标题】:Why should structure have to be word aligned? [duplicate]为什么结构必须是字对齐的? [复制]
【发布时间】:2011-07-06 06:11:48
【问题描述】:

可能重复:
Purpose of memory alignment

为什么结构或任何内存分配(如 int,char)必须是字对齐的。它有什么好处?

更新: 主要原因是,如果不是内存对齐,有可能数据类型(int)的一部分在一个物理页面中,而另一部分在另一个物理页面中?

我觉得这是一个更强有力的理由?

【问题讨论】:

    标签: c data-structures word alignment memory-alignment


    【解决方案1】:

    许多 32 位机器上的内存访问在 32 位边界上要快得多,要访问单个字节,机器必须读取 32 位(4 字节)段,然后进入它

    【讨论】:

      【解决方案2】:

      正如马丁所说,它更快......

      ... 还有一些 cpu 架构和一些 cpu 指令 require 它 - 否则会崩溃。

      例如,一些(?)ARM cpus 会因不对齐而出错。 例如,x86/x64 上的 MMX/SSE 需要 16 字节对齐。

      【讨论】:

        【解决方案3】:

        我在某处读过相同的内容(不记得了:如果我错了,请纠正我)并支持钢的 cmets:

        这个词,即 2 字节或 16x 的数据通常用于那些涉及 mul / div / 有符号操作的数据操作......主要区别 b/w x85 和 x86

        【讨论】:

          【解决方案4】:

          如果您考虑一下机器的接线方式,这一切都说得通。

          有时,人们试图改变这一点(Rambus、FBDIMM),但我们不断将 DRAM 阵列中的每个位连接到 CPU 总线上的相同位。

          在计算机的早期,在内存数据总线上移动位以纠正未对齐的访问是非常昂贵的。有些机器不允许这一切。那些确实增加了速度惩罚的人。一些,像原来的,当时超快和第一好- 64 位微 DEC-Alpha,实际上确实纠正了它,但以软件陷阱为代价!

          IA32 和 x64 架构始终透明地修复它,每个芯片上都有数以万计的晶体管,它们具有桶形移位器和其他专用硬件,可以轻松修补未对齐的参考。

          但是,它仍然可能会中断管道,可能需要某种微陷阱;这不是“自然方式”。

          具体的惩罚取决于您使用的芯片的微架构。可移植代码应该假设未对齐的访问受到惩罚。一些嵌入式 CPU 芯片(Some Arm)实际上不会出错,只是做错了事!我真诚地希望所有这些都停产。

          【讨论】:

            猜你喜欢
            • 2012-08-11
            • 2015-05-29
            • 1970-01-01
            • 2019-05-30
            • 1970-01-01
            • 2013-06-02
            • 2019-10-06
            • 2014-04-10
            • 1970-01-01
            相关资源
            最近更新 更多