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에 작성되었습니다.