GeekCoders
[C++/DirectX11] object allocated on the heap may not be aligned 16 본문
Client/DirectX11
[C++/DirectX11] object allocated on the heap may not be aligned 16
령호 2015. 2. 20. 03:34object allocated on the heap may not be aligned 16
위 경고는 16byte로 정렬되야 하는 데이터를 멤버로 가지거나, 할당할 때 생기는 경고다.
이 경고가 무서운 이유는 경고를 무시하고 실행해도 가끔 실행되고, 가끔 죽는다.
운좋게 16바이트로 메모리가 정렬되면 멀쩡하게 돌아가고, 그 반대는 메모리크래쉬로 이어진다.
DirectXMath.h 또는 XnaMath.h 가 위 경고를 발생시킨다.
__declspec(align(16)) struct XMMATRIX
__declspec(align(16)) struct XMFLOAT2A : public XMFLOAT2
...
위와 같이 16바이트로 정렬된 데이터를 사용한다.
16바이트로 정렬된 데이터를 할당 할 때에는 명시적으로 16바이트로 할당 해 주어야 한다.
해결방법은
m_pInstance = (T*)_aligned_malloc(sizeof(T), 16);
위와 같이 할당해주며,
m_pInstance->~T();
_aligned_free(m_pInstance);
위와 같이 해제해준다.
'Client > DirectX11' 카테고리의 다른 글
[DirectX11] Warning C4005 (0) | 2015.02.13 |
---|---|
[DirectX11] DirectX11에서 사용되는 XNAMath (0) | 2015.02.12 |