2012-07-27 19 views
9

Ten prosty kod SSE:wektora __mm128 nie push_back()

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

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

awarii na MSVC 10 z segfault w 0xffffffff.

Co może być nie tak?

+0

Wyrównanie będzie problemem. Pytanie brzmi: jak i jak naprawić – sehe

+0

Dodawanie __declspec (align (16)) na typie danych nie pomaga. Również "__m128" wydaje się być wyrównane natywnie: http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx – slaphappy

+1

Zmienne tego typu. Nie obiekty umieszczone w pamięci sterty. – Puppy

Odpowiedz

13

A std::vector nie przydziela specjalnie wyrównanych pamięci, które __m128 potrzebuje do przechowywania danych. Będziesz musiał zamienić alokator lub zastąpić go 4 tablicami, a następnie za każdym razem, gdy uzyskasz dostęp do wektora, wykonaj niezalecane ładowanie lub kopiuj do wyrównanej lokalizacji.

Powiązane problemy