SlideShare a Scribd company logo
1 of 8
C++ align, __declspec(align(#))
NHN NEXT Team PoopTube
align
 __declspec(align(#))를 사용하여 사용자 정의 데이터를 정확하게 제어한다.
 #은 alignment할 값이다. (2, 4, 8, 16, 32, 64 등과 같이 1에서 8192(바이트) 사이에 속하는 2의 정
수 제곱값이다.)
왜 align?
 __declspec(align(#))을 사용하지 않으면 VC++가 알아서 alignmet
 새로운 명령을 사용할 때 데이터를 16바이트 경계에 맞춰야 하는 경우가 많다.(당장
D3DXMATRIXA16만 봐도 그렇다.)
 자주 사용하는 데이터를 특정 프로세서의 캐시 줄 크기에 맞춤으로써 캐시 성능이 향상된다.
Visual C++ alignment 규칙
#define CACHE_LINE 32
#define CACHE_ALIGH __declspec(align(CACHE_LINE))
struct CACHE_ALIGN S1 {
int a, b, c, d;
};
sizeof(struct S1)은 32. 16 padding byte가 추가된다.
구조체 멤버는 int 멤버에 맞게 4byte alignment되어야 하지만 구조체를 32byte로 align 했기 때문
Visual C++ alignment 규칙
__declspec(align(8)) struct S2 {
int a, b, c, d;
};
sizeof(struct S2)는 align(8)의 배수로 맞춰서 16이 된다.
Visual C++ alignment 규칙
 struct S3는 struct S1의 alignment를 따른다.
struct S3 {
struct S1 s1;
int a;
};
sizeof(struct S3)은 32(s1) + 32(int a + 28 padding byte)가 된다.
D3DXMATRIXA16 structure
 A 4x4, 16-byte-aligned matrix that contains methods and operator overloads.
 16-byte-aligned에 주목하면 되겠다.
 D3DX에서 vector와 quaternion은 align되지 않는다.
 그래서 D3DX math를 가지고 vector, quaternion을 사용할 때는 __declspec(align(16))을 해서
해주어야 한다. 성능이 향상된다고 한다.
#define D3DX_ALIGN16 __declspec(align(16))
참고자료
 http://msdn.microsoft.com/en-us/library/windows/desktop/bb172912(v=vs.85).aspx
 http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-
US&k=k(__declspec_CPP);k(__declspec);k(DevLang-C%2B%2B);k(TargetOS-
Windows)&rd=true

More Related Content

More from 문익 장

Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client문익 장
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 
삼각형으로 지면 만들기
삼각형으로 지면 만들기삼각형으로 지면 만들기
삼각형으로 지면 만들기문익 장
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)문익 장
 
3D Graphics Transform
3D Graphics Transform3D Graphics Transform
3D Graphics Transform문익 장
 
Direct3d overview
Direct3d overviewDirect3d overview
Direct3d overview문익 장
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)문익 장
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 

More from 문익 장 (8)

Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
삼각형으로 지면 만들기
삼각형으로 지면 만들기삼각형으로 지면 만들기
삼각형으로 지면 만들기
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
 
3D Graphics Transform
3D Graphics Transform3D Graphics Transform
3D Graphics Transform
 
Direct3d overview
Direct3d overviewDirect3d overview
Direct3d overview
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 

C++ align