안녕하세요 매직블럭입니다.
인터넷 끄적거리다 구조체의 크기 및 패딩에 대한 글을 보고 테스트를 한번 해봤는데요
우선 실험에 사용한 소스코드는 아래와 같습니다.
-
#include <stdio.h>
-
#include <Windows.h>
-
-
struct TEST1
-
{
-
char c;
-
short s;
-
int i;
-
double d;
-
};
-
-
struct TEST2
-
{
-
short s;
-
int i;
-
double d;
-
char c;
-
};
-
-
#pragma pack(1)
-
struct TEST3
-
{
-
short s;
-
int i;
-
double d;
-
char c;
-
};
-
#pragma pack()
-
-
void main()
-
{
-
TEST1 T;
-
TEST2 T2;
-
TEST3 T3;
-
-
printf( "====== T ======\n" );
-
printf( "Sizeof(c) : %d\n", sizeof(T.c) );
-
printf( "Sizeof(s) : %d\n", sizeof(T.s) );
-
printf( "Sizeof(i) : %d\n", sizeof(T.i) );
-
printf( "Sizeof(d) : %d\n", sizeof(T.d) );
-
printf( "Sizeof(T) : %d\n", sizeof(T) );
-
-
printf( "\n====== T2 ======\n" );
-
//printf( "Sizeof(c) : %d\n", sizeof(T2.c) );
-
printf( "Sizeof(s) : %d\n", sizeof(T2.s) );
-
printf( "Sizeof(i) : %d\n", sizeof(T2.i) );
-
printf( "Sizeof(d) : %d\n", sizeof(T2.d) );
-
printf( "Sizeof(T) : %d\n", sizeof(T2) );
-
-
printf( "\n====== T3 ======\n" );
-
printf( "Sizeof(c) : %d\n", sizeof(T3.c) );
-
printf( "Sizeof(s) : %d\n", sizeof(T3.s) );
-
printf( "Sizeof(i) : %d\n", sizeof(T3.i) );
-
printf( "Sizeof(d) : %d\n", sizeof(T3.d) );
-
printf( "Sizeof(T) : %d\n", sizeof(T3) );
-
-
system("pause");
-
}
여기서 제가 궁금한게 구조체 TEST2 의 크기입니다.
저렇게 선언을 하면 20바이트 가 될거라고 생각했는데 막상 찍어보면 24바이트가 나오더라고요
그래서 TEST2 구조체에서 char c; 이부분만 주석처리하고 다시 돌려보니 이번엔 16바이트가 나오네요
크기가 이렇게 제가 생각한 것과 다른 이유가 무엇일까요..?
왜그런지 파악도 안되고 고민하다 질문 합니다.
고수님들의 답변 기다리겠습니다. 감사합니다.