bit field 구조체 관련 문제

high385의 이미지

typedef struct {
unsigned short visible:1;
unsigned char visible2:1;
} ELEMENT_DATA1;

와 같이 선언 후

ELEMENT_DATA1 pattern1;
printf("크기=%d\n",sizeof(pattern1));

==> pattern1 크기로서 4가 나오는 상황입니다.

저는 3바이트가 나와야 된다고 생각했는데 이유를 모르겠네요.

아시는 분 알려주세요~

라스코니의 이미지

기본으로는 padding이 들어가서 visible2 뒤에 1 바이트가 추가로 붙어서 강제로 4 바이트를 맞춰서 그렇습니다.

high385의 이미지

궁금합니다.

익명 사용자의 이미지

32비트 타겟으로 빌드하면 4byte alignment 를 위해 구조체 역시 예외가 아니어서 패딩을 넣게 됩니다.
http://blog.naver.com/brosvaby/175186543 가령 이러한 것을 읽어보시면 아실 수 있습니다.

Visual Studio 의 경우 #pragma pack(n) 이라는 것이 있어서 패딩 단위를 조절할 수도 있으나 특별한 경우가 아니면 권장하지 않습니다.