이전게시판/C, C++

구조체 패딩이란?

ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ 2016. 3. 31. 16:28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
struct Player
{
    char name;
    int level;
    short wClass;
};
 
#pragma pack(1)
struct Player2
{
    char name;
    int level;
    short wClass;
};
 
void main()
{
    Player player;
    Player2 player2;
 
    printf("name:%d level:%d class:%d AllSize:%d \n"sizeof(player.name),
        sizeof(player.level), sizeof(player.wClass), sizeof(player));
 
    printf("name:%d level:%d class:%d AllSize:%d \n"sizeof(player2.name),
        sizeof(player2.level), sizeof(player2.wClass), sizeof(player2));
 
    getchar();
}
cs

구조체 패딩은....
32비트 운영체제일 때는 4byte, 64비트 운영체제일 때는 8byte를 읽어온다.
그래서 빈공간이 있을 땐 딱 4byte, 8byte에 맞아 떨어지도록 구조체 패딩을한다.
그래서 Player의 사이즈는 7이 아니라 12이다. char도 4byte로 wClass도 4byte로 치환한다.
이것을 방지하기 위해선 pragma pack을 사용해 Player2 클래스처럼 만들어주면 된다.