3

基本上问题是什么,如果我在各种 CPU 上执行不是 8 字节(甚至 4 字节)对齐的 MOVSD,会发生什么?它是否会对性能产生影响,是否会出现段错误等?

4

1 回答 1

4

来自英特尔规范的第 1 卷,第 4.1 节

4.1.1 字、双字、四字、双四字的对齐

字、双字和四字在内存中不需要在自然边界上对齐。字、双字和四字的自然边界分别是偶数地址、可被 4 整除的地址和可被 8 整除的地址。然而,为了提高程序的性能,数据结构(尤其是堆栈)应该尽可能在自然边界上对齐。原因是处理器需要两次内存访问才能进行未对齐的内存访问;对齐访问只需要一次内存访问。跨越 4 字节边界的字或双字操作数或跨越 8 字节边界的四字操作数被认为是未对齐的,并且需要两个单独的内存总线周期才能访问。

在“正常”情况下,未经处理的 movsd 将需要 2 个周期才能完成。

如果您打开对齐检查(在 EFLAGS 中),那么 CPU 将产生一个 AC 信号。它主要是为了帮助您检测未对齐的访问。

于 2012-03-03T04:13:16.800 回答