2012-07-27 3 views
9

này đang SSE đơn giản:vector của __mm128 sẽ không push_back()

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

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

Crashes trên MSVC 10 với một segfault tại 0xffffffff.

Điều gì có thể xảy ra?

+0

Căn chỉnh sẽ là vấn đề. Câu hỏi đặt ra là: làm thế nào và làm thế nào sửa chữa – sehe

+0

Thêm __declspec (align (16)) trên kiểu dữ liệu không giúp đỡ. Ngoài ra, '__m128' dường như được căn chỉnh một cách tự nhiên: http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx – slaphappy

+1

Các biến kiểu đó. Không phải đối tượng được đặt vào bộ nhớ heap. – Puppy

Trả lời

13

A std::vector không cấp phát bộ nhớ được căn chỉnh đặc biệt, trong đó __m128 cần lưu trữ dữ liệu của nó. Bạn sẽ phải hoán đổi bộ cấp phát, hoặc thay thế nó bằng một mảng gồm 4 float và sau đó thực hiện một tải chưa được sắp xếp hoặc sao chép ra một vị trí phù hợp mỗi lần bạn truy cập vectơ.