在x86中,与16字节边界的对齐意味着什么

SIM*_*MEL 6 optimization x86

英特尔的官方优化指南中有一章介绍了从MMX命令转换到SSE的情况,他们说明了这些命令:

使用可能未与16字节边界对齐的存储器操作数的计算指令必须用未对齐的128位加载(MOVDQU)替换,然后使用相同的计算操作来代替寄存器操作数.

(第5.8章从64位转换为128位SIMD整数,第5-43页)

我无法理解他们的意思是"可能没有与16字节边界对齐",你能澄清一下并给出一些例子吗?

Jak*_*kob 11

某些SIMD指令对多个数据执行相同的指令,要求该数据的存储器地址与某个字节边界对齐.这实际上意味着您的数据所在的内存地址需要能够被指令所需的字节数整除.

因此,在您的情况下,对齐是16字节(128位),这意味着您的数据的内存地址需要是16的倍数.例如,0x00010将是16字节对齐,而0x00011将不是.

如何使数据对齐取决于您使用的编程语言(有时是编译器).大多数具有内存地址概念的语言也会为您提供指定对齐方式.