이전게시판/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 클래스처럼 만들어주면 된다.