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