C++11 - alignof
개요
alignof()는 지정한 타입이 메모리의 어느 위치에 배치될지를(배치) 얻는 연산자이다.
sizeof()와는 다르고 alignof()는 변수에는 사용할 수 없다.
예를 들면 타입 int가 4바이트 경계 위치로 배치되는 시스템이라면 alignof(int)은 4를 반환한다.
문법
alignof(타입)은 지정한 타입의 배치 크기를 반환한다. 반환 값 타입은 std::size_t이다.
가장 제약이 약한, 즉 배치의 크기가 최소가 되는 형태는 char, signed char, unsigned char이고, 가장 제약이 강한 즉 배치 크기가 최대인 형태는 std::max_align_t 이다.
코드
#include <cstddef>
#include <iostream>
struct hoge {
char c[63];
short s;
double i;
};
struct empty {
};
int main()
{
std::cout <<
"std::max_align_t: " << alignof(std::max_align_t) << std::endl <<
"char: " << alignof(char) << std::endl <<
"int: " << alignof(int) << std::endl <<
"double: " << alignof(double) << std::endl <<
"struct hoge: " << alignof(hoge) << std::endl <<
"struct empty: " << alignof(empty) << std::endl <<
"char *: " << alignof(char *) << std::endl;
return 0;
}
x86 linux std::max_align_t: 8 char: 1 int: 4 double: 8 struct hoge: 4 struct empty: 1 char *: 4
출처: https://cpprefjp.github.io/lang/cpp11/alignof.html
이 글은 2017-04-01에 작성되었습니다.