2012-07-27 31 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ơ.

Các vấn đề liên quan