프로그래밍 언어/C언어

C언어 구조체 자료형의 크기(패딩비트)

원원 2017. 8. 17. 23:46

안녕하세요. 이번에는 구조체 자료형의 크기에 대해 알아보겠습니다.

기본적으로 자료형의 크기를 알아보는 함수는 sizeof(자료형)입니다.




1
2
3
4
5
6
typedef struct
{
    int HP;
    int MP;
    char class;
}user;
cs

int는 4바이트, char은 1바이트

그러므로 user구조체의 크기는 9바이트라고 예상이 됩니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
 
typedef struct
{
    int HP;
    int MP;
    char class;
}user;
 
int main()
{
    user user1;
    
    printf("user1.HP의 크기 : %d \n"sizeof(user1.HP));
    printf("user1.MP의 크기 : %d \n"sizeof(user1.MP));
    printf("user1.class의 크기 : %d \n"sizeof(user1.class));
    printf("-----------------------\n");
    printf("user1의 크기 : %d \n"sizeof(user1));
}
cs



user1.HP (int형)의 크기가 4바이트라고 출력되었고

user1.MP (int형)의 크기가 4바이트라고 출력되었고

user1.class (char형)의 크기가 1바이트라고 출력되었습니다.

그럼 user1의 크기는 9바이트가 되야하는데 실제로 측정해보니 12바이트가 나왔습니다.


구조체는 패딩비트(padding)라는 것을 사용하는데요, 패딩비트란 사용하지 않는 비트를 의미합니다.

실제적으로 이야기한다면

■■■■(user1.HP) ■■■■(user1.MP) ■□□□(user1.class)

(□ : 패딩비트)


이런식으로 가장 큰 자료형의 크기를 따라갑니다.



소켓통신으로 구조체를 보낼때 패딩비트를 생각하지않으면 이상한 값이 찍히게 됩니다.