반응형
패딩비트 (Padding Bit)
패딩비트란 사용하지 않는 비트 의미한다.
구조체에서 가장 큰 자료형 크기를 따라간다.
typedef struct
{
int power; // 4 B
int level; // 4 B
char status; // 1 B
} User;
int 4바이트, char 1바이트
user구조체 크기는 9바이트 예상 된다.
자료형 크기는 sizeof(자료형)로 알 수 있다.
#include<stdio.h>
typedef struct
{
int power;
int level;
char status;
} User;
int main()
{
User user;
printf("power 크기 = %d \n", sizeof(user.power));
printf("level 크기 = %d \n", sizeof(user.level));
printf("status 크기 = %d \n", sizeof(user.status));
printf("user 크기 = %d \n", sizeof(user));
}
power, level, status 변수는
각 자료형 크기를 가지지만
구조체 User 크기는 4 + 4 + 1 = 9가 아닌 12를 가진다.
(user1.power) | (user1.level) | (user1.status)
■■■■ | ■■■■ | ■□□□
long long → 8B 자료형을 추가하였을 때
그 크기에 맞춰서 status 변수가 8B 까지 패딩 비트가 들어갔다.
#include<stdio.h>
typedef struct
{
long long ID;
int power;
int level;
char status;
} User;
int main()
{
User user;
printf("ID 크기 = %d \n", sizeof(user.ID)); // 8B
printf("power 크기 = %d \n", sizeof(user.power)); // 4B
printf("level 크기 = %d \n", sizeof(user.level)); // 4B
printf("status 크기 = %d \n", sizeof(user.status)); // 1B
printf("user 크기 = %d \n", sizeof(user)); // 24 B
}
8 + 4 + 4 + 8 = 24
■■■■■■■■ | ■■■■ | ■■■■ | ■□□□□□□□
이러한 패팅비트는
소켓 통신과 같은 구조체 사용시 유의해야 한다.
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C/C++] packed 키워드 (3) | 2024.11.16 |
---|---|
[C++] likely, unlikey 키워드 구문 (5) | 2024.11.10 |
[C/C++] struct 차이 비교 (1) | 2024.11.08 |
[C/C++] #define과 const 차이 (7) | 2024.11.02 |
[C++] auto 키워드 (4) | 2024.10.28 |
댓글