__mm128的向量无法使用push_back()函数添加元素。

9
这段简单的SSE代码:
#include <vector>
#include <emmintrin.h>

int main() {
    std::vector<__m128> blah;
    blah.push_back(__m128());
}

使用MSVC 10时发生崩溃,出现段错误(segfault)位置:0xffffffff

可能出了什么问题?


对齐将成为问题。问题是:如何以及如何修复。 - sehe
在数据类型上添加__declspec(align(16))是没有帮助的。此外,__m128似乎是本地对齐的:http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx - slaphappy
1
那种类型的变量。不是放置在堆内存中的对象。 - Puppy
2
哦...我以前从未尝试过那个。你肯定会遇到对齐问题,因为默认分配器不会对齐到16字节。你需要使用自己的覆盖默认分配器。 - Mysticial
1个回答

13

std::vector不会分配特殊对齐的内存,而__m128需要存储其数据。因此,你必须更改分配器或者将它替换为由4个浮点数组成的数组,每次访问该向量时,需要执行一个非对齐加载或复制到对齐位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接