SIMD i dynamiczne przydzielanie pamięci [duplikat]

Możliwy duplikat:
SSE, intrinsics i alignment

Jestem nowicjuszem w programowaniu SIMD, więc proszę wybacz, jeśli zadaję oczywiste pytanie.

Poeksperymentowałem trochę i doszedłem do punktu, w którym chcę zapisać wartość SIMD w dynamicznie przydzielanej strukturze.

Oto kod:

struct SimdTest
{
    __m128      m_simdVal;

    void setZero()
    {
        __m128 tmp = _mm_setzero_ps(); 
        m_simdVal = tmp; // <<--- CRASH ---
    }
};

TEST( Plane, dynamicallyAllocatedPlane )
{
    SimdTest* test = new SimdTest();

    test->setZero();

    delete test;
}

Gdy wykonywana jest metoda oznaczona komentarzem CRASH, kod ulega awarii z następującym wyjątkiem:

Unhandled exception at 0x775315de in test-core.exe: 0xC0000005: Access violation reading location 0x00000000

Czy ktoś mógłby wyjaśnić, dlaczego operacja przypisania jest przerywana i jak należy dynamicznie przypisywać obiekty zawierające SIMD, aby działały prawidłowo?

Muszę dodać, że jeśli statycznie utworzę obiekt SimdTest i wywołam metodę setZero, wszystko działa prawidłowo.

Dzięki, Paksas

questionAnswers(2)

yourAnswerToTheQuestion