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:34

object 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);

위와 같이 해제해준다.










참조 : http://www.slideshare.net/quxn6/c4316-alignment-error

'Client > DirectX11' 카테고리의 다른 글

[DirectX11] Warning C4005  (0) 2015.02.13
[DirectX11] DirectX11에서 사용되는 XNAMath  (0) 2015.02.12