2012-07-27 8 views
9

Este simple código SSE:vector de __mm128 no push_back()

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

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

bloquea en MSVC 10 con una violación de segmento en 0xffffffff.

¿Qué podría estar yendo mal?

+0

La alineación será el problema. La pregunta es: cómo y cómo arreglar – sehe

+0

Agregar __declspec (alinear (16)) en el tipo de datos no ayuda. Además, '__m128' parece estar alineado de forma nativa: http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx – slaphappy

+1

Variables de ese tipo. No objetos colocados en la memoria del montón. – Puppy

Respuesta

13

A std::vector no asigna memoria especialmente alineada, que __m128 necesita para almacenar sus datos. Deberá intercambiar el asignador o reemplazarlo con una matriz de 4 flotantes y luego realizar una carga desalineada o copiar a una ubicación alineada cada vez que acceda al vector.

Cuestiones relacionadas