2012-07-27 7 views
9

Diese einfache SSE Code:Vektor __mm128 wird push_back nicht()

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

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

Abstürze auf MSVC 10 mit einem segfault bei 0xffffffff.

Was könnte schief gehen?

+0

Ausrichtung wird das Problem sein. Die Frage ist: Wie und wie zu beheben – sehe

+0

Das Hinzufügen von __declspec (align (16)) auf den Datentyp hilft nicht. Außerdem scheint '__m128 'nativ ausgerichtet zu sein: http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx – slaphappy

+1

Variablen dieses Typs. Keine Objekte im Heapspeicher. – Puppy

Antwort

13

Ein std::vector reserviert nicht speziell ausgerichteten Speicher, der __m128 benötigt, um seine Daten zu speichern. Sie müssen entweder den Zuordner austauschen oder ihn durch ein Array von 4 Gleitkommazahlen ersetzen und dann jedes Mal, wenn Sie auf den Vektor zugreifen, eine nicht ausgerichtete Ladung ausführen oder an eine ausgerichtete Position kopieren.