Al compilar con VS2012 y trabajar con la biblioteca DirectXMath, encontré un problema donde parecía que el compilador no estaba alineando mi XMMATRIX. Simplifiqué el problema a lo siguiente.Alineación 16 no respetada cuando se utiliza la palabra clave auto?
#include <DirectXMath.h>
using namespace DirectX;
int _tmain(int argc, _TCHAR* argv[])
{
auto m1 = XMMatrixIdentity();
auto m2 = XMMatrixIdentity();
auto t1 = XMMatrixTranspose(m1); // sometimes access violation occurs here
auto t2 = XMMatrixTranspose(m2); // or sometimes here
return 0;
}
Volver a ejecutar el código una y otra va a causar a veces un "acceso de lectura violación 0xFFFFFFFF ubicación" en la primera transposición, a veces en el segundo.
He descubierto que esto se debe a que m1 y m2 no se alinean correctamente. Reemplazar "auto" con "XMMATRIX" parece resolver el problema, por lo que sospecho que es un error del compilador, pero también es posible que esté haciendo algo mal o que no esté habilitando alguna opción.
¿Hay algún problema con mi código o es un error del compilador?
¿Ha tenido un vistazo al conjunto resultante para comprobar si hay alguna diferencia? –
@ J.N. sí, si no uso "auto" entonces definitivamente tiene instrucciones adicionales que juegan con esp y (supongo) ayudan a asegurar que los dos XMMATRIX estén alineados correctamente. – MerickOWA
Bueno, a menos que 'XMMATRIX' sea una macro, yo voto por un error del compilador. Si es una macro, entonces puede ser un error DX ... –