비트 필드를 할당한 구조체의 바이트 크기
조회수 875회
typedef struct _BITFIELD {
unsigned int a : 1;
unsigned int b : 3;
unsigned int c : 7;
unsigned int d : 33;
} BitField;
int main() {
printf("%d byte(s)\n", (int)sizeof(BitField)); // 12 byte(s)
return 0;
}
네 개의 멤버변수에 각각 1, 3, 7, 33비트를 할당한 구조체입니다.
이 구조체의 크기를 확인해 보면 12바이트가 반환되는데, 어떻게 12바이트가 나오는 건지 모르겠네요. 1+3+7=11비트이고, 33은 unsigned int의 크기를 초과하니 32비트로 줄여서 할당하면 11+32=43비트가 될 것 같은데 그건 아니네요.
그렇다고 4바이트 unsigned int x 4를 해서 16바이트인 것도 아니구요.
12바이트는 어떻게 계산되는 건가요? 컴파일 환경은 x64 Linux, gcc 7.3.0입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
unsigned int d : 33;
4바이트 크기인 32비트를 넘어버렸으니 8바이트가 할당됩니다.
unsigned int a : 1; unsigned int b : 3; unsigned int c : 7;
에 4바이트가 할당됩니다.
즉 _BITFIELD 구조체는 12바이트를 할당받습니다.
- 답변 감사합니다. 그런데 a, b, c에 32비트가 어떻게 할당되는 건가요? 합하면 11비트인데... 알 수 없는 사용자 2019.3.15 00:54
- 성능상의 이유로 4바이트로 연산하도록 패딩비트를 삽입합니다. 물론 #pragma pack 선언으로 컨트롤이 가능합니다. 정영훈 2019.3.15 16:19
댓글 입력