在编写向量化代码时,有时会希望执行内存对齐操作。
所以假设我有一个
unsigned char[]
在 16 字节边界之前结束,但我想一次加载整个 16 字节对齐的块(然后大概屏蔽掉我不需要的数据)。
在不触发未定义行为的情况下跨 Clang、MSVC 和 GCC 执行此操作的正确方法是什么?
(我们不要假设任何特定的向量类型或操作 - 我希望方法对未对齐的
__m256i
和未对齐的unsigned int
一样有效。)
注意:我不是在问这是否/何时有用或合法。我已经知道这些问题的答案了。当我们已经知道它在硬件级别有用且合法但在语言级别非法时,我在问如何在这 3 个主流编译器上执行此操作。