这是正常工作的代码:
char a[100];
for (int i = 0; i < 100; i++)
a[i] = 0;
__m128i x = _mm_load_si128((__m128i *) a);
但如果我动态分配内存,VS 2013将会中断:
char *a = new char[100];
for (int i = 0; i < 100; i++)
a[i] = 0;
__m128i x = _mm_load_si128((__m128i *) a);
如何同时使用动态内存和对齐加载指令?
答案 0 :(得分:2)
因为sizeof返回char指针的大小:4个字节。
答案 1 :(得分:0)
你可以操纵new
运算符来返回对齐的内存(这可能不是最好的维护方式),或者你可能会分配更多的内存并只对它的对齐部分进行操作。例如,如果需要在8字节偶数地址上进行对齐,则再分配8个字节,并按照以下方式处理对齐的指针。
char* a;
uintptr_t unaligned = (uintptr_t)a;
uintptr_t aligned = ( unaligned % 8 ) ? unaligned : ( unaligned % 8 ) + 8;
char* a_aligned = (char*)aligned;
类型uintptr_t
在stdint.h
中定义。