#include<stdio.h>
struct Test2
{
char c;
int i;
double d;
};
void main()
{
Test2 t1;
printf("%d", sizeof(t1));
}
char == 1byte , double = 8byte , int == 4byte 그래서 다 더해져서 13byte
그럼 출력이 13일까??

놀랍게도 16! 이는 구조체의 크기를 할당할때 , 구조체의 요소들 중 가장 큰 자료형의 크기를 기준으로 그 배수만큼 크기를 갖는다고 한다.

위 구조체 Test2 의 메모리 배치는 위와 같다
여기서 char 형 옆에 3 의 padding 공간이 있다. 그런데 왜 하필 c 옆일까??? 이는 또 하나의 규칙이 존재하는데 , 자료들을 배치할때 메모리의 주소 번지를 각 크기의 배수번째에 배치를 시킨다고 한다. 이는 다음의 struct 형 자료를 보고 이해를 해보자.
#include<stdio.h>
struct Test
{
char c1;
char c2;
int tmp;
char c3;
char c4;
double tmp3;
};
void main()
{
Test t1;
printf("%d", sizeof(t1));
}
char 형 4개 그리고 int 형 1개 그리고 double 1개 그럼 4 + 4 + 8 == 16 일 것 이다.

노올랍게도 24!! 이는 위에서 설명했던 2번째 규칙때문이다.

위와 같이 배치되는것이 아니다! int 형이 여기서 메모리의 시작으로 부터 2 만큼 떨어져있으므로 , 자신의 크기인 4의 배수에 위치해 있지 않게 되어서 이런식으로 배치시키지 않는다.

아마 이런식으로 배치가 되어 24의 결과가 나온것일 것이다.
#include<stdio.h>
struct Test
{
char c1;
char c2;
char c3;
char c4;
int tmp;
double tmp3;
};
void main()
{
Test t1;
printf("%d", sizeof(t1));
}
사실 이 코드를 위에 코드보다 먼저 설명했었어야 했는디; 자 다음과 같은 경우는 어떻게 될까? 위에서는 24 였는데 이번에는 배수의 크기만큼16이 나온다.