2012-07-27 60 views
9

这个简单的SSE代码:on MSVC 10矢量不会的push_back()

#include <vector> 
#include <emmintrin.h> 

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

崩溃与0xffffffff段错误。

可能会出现什么问题?

+0

对齐将是问题。问题是:如何修复以及如何修复 – sehe 2012-07-27 00:03:26

+0

在数据类型中添加__declspec(align(16))不起作用。此外,'__m128'似乎本地对齐:http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx – slaphappy 2012-07-27 00:09:53

+1

该类型的变量。没有将对象放入堆内存中。 – Puppy 2012-07-27 00:24:36

回答

13

A std::vector不分配专门对齐的内存,其中__m128需要存储它的数据。您将不得不换出分配器,或者将其替换为4个浮点数组,然后每次访问矢量时执行未对齐的加载或复制到对齐的位置。