SSE 등의 SIMD 명령이나 캐시를 의식한 프로그램은 메모리 얼라이먼트를 고려해야 한다.


메모리 얼라이먼트를 위해서 C++11 에서는 alignof와  alignas가 생겼다.

alignof: 변수나 타입의 얼라이먼트를 얻는다.

alignas: 변수 선언 때 얼라이먼트를 지정한다. 


int main() 

{

    alignas(int) unsigned char c[32]; // 배열 C는 int의 사이즈 단위의 어드레스로 배치.

    alignas(4) int a;          // a는 4 바이트 단위의 어드레스로 배치

    

alignas(32) int  array[8];  // array는 32바이트 단우의 어드레스로 배치 

int int_align = alignof(int); // int의 얼라이먼트를 얻는다.

}


alignas와 alignof 기능은 C++11 이전에는 각 컴파일러 마다 확장 기능을 가지고 있었음.

VC의 경우 alignas는  __declspec(align(byte)), alignof는 __alignof(type)

저작자 표시
신고
by 흥배 2014.07.14 08:00
| 1 |

티스토리 툴바