【发布时间】:2014-05-17 20:30:50
【问题描述】:
以下在 MSVC 上编译时没有警告。
#include <iostream>
#include <emmintrin.h>
int main()
{
__declspec(align(16)) int x = 42;
std::cout << &x << "\n"; // Print out the address that holds x
__m128i v = _mm_load_si128((__m128i const*)(x));
}
基本上,代码对齐一个 32 位整数,并尝试将其加载到 __m128i 类型中。 _mm_load_si128 要求输入地址为 16 字节对齐。 _mm_loadu_si128 不需要它,但两者都会导致上述代码在运行时发出访问冲突。为什么,我该如何解决?
【问题讨论】:
标签: c++ sse intrinsics