구조체의 메모리 할당은 멤버들을 주어진 순서대로 할당한다.
1 /*
2 * 작성일 : 2008. 08. 28.
3 * 작성자 : 박상현[정보통신총괄]
4 * 내 용 : 구조체 테스트
5 */
6
7 #include <stdio.h>
8
9 int main()
10 {
11 struct A1
12 {
13 char a;
14 int b;
15 char c;
16 } X;
17
18 struct A2
19 {
20 char a;
21 char b;
22 int c;
23 } Y;
24
25 printf("X sizeof : %d, Y sizeof : %d\n", sizeof(X), sizeof(Y));
26 return 0;
27
28 }
29
[linux6@cam00 four]$ make
cc -O2 -Wall -Os -g -I/usr/include -c struct.c
cc -o struct struct.o
[linux6@cam00 four]$ ./struct
X sizeof : 12, Y sizeof : 8
결과에서 보는 것처럼 A1, A2 두 구조체에는 똑같이 char 둘, int 하나씩 정의했으나,
각각의 크기는 12 와 8 로 차이가 났다.
X 구조체를 보면 메모리에 4바이트를 할당한 후 a 멤버를 저장한다. 다음 멤버 b 는 정수이므로
3바이트 남은 공간에 저장될 수 없으므로 3개의 바이트를 건너뛰어 적정한 경계로 이동한다.
그리고 4바이트 할당 후 저장된다. 마지막으로 c 멤버를 위해 4바이트 할당 후 저장한다. 따라서
12바이트를 사용하게 된다.
그러나 Y 구조체는 경계 정렬이 적게 일어나는 멤버들을 인접하여 배치함으로써 구조체 빈 공간을
최소화하였다.
A2 구조체와같이 효율적으로 멤버들을 배치함으로써 낭비되는 공간을 줄이도록 하자.
1 /*
2 * 작성일 : 2008. 08. 28.
3 * 작성자 : 박상현[정보통신총괄]
4 * 내 용 : 구조체 테스트
5 */
6
7 #include <stdio.h>
8
9 int main()
10 {
11 struct A1
12 {
13 char a;
14 int b;
15 char c;
16 } X;
17
18 struct A2
19 {
20 char a;
21 char b;
22 int c;
23 } Y;
24
25 printf("X sizeof : %d, Y sizeof : %d\n", sizeof(X), sizeof(Y));
26 return 0;
27
28 }
29
[linux6@cam00 four]$ make
cc -O2 -Wall -Os -g -I/usr/include -c struct.c
cc -o struct struct.o
[linux6@cam00 four]$ ./struct
X sizeof : 12, Y sizeof : 8
결과에서 보는 것처럼 A1, A2 두 구조체에는 똑같이 char 둘, int 하나씩 정의했으나,
각각의 크기는 12 와 8 로 차이가 났다.
X 구조체를 보면 메모리에 4바이트를 할당한 후 a 멤버를 저장한다. 다음 멤버 b 는 정수이므로
3바이트 남은 공간에 저장될 수 없으므로 3개의 바이트를 건너뛰어 적정한 경계로 이동한다.
그리고 4바이트 할당 후 저장된다. 마지막으로 c 멤버를 위해 4바이트 할당 후 저장한다. 따라서
12바이트를 사용하게 된다.
그러나 Y 구조체는 경계 정렬이 적게 일어나는 멤버들을 인접하여 배치함으로써 구조체 빈 공간을
최소화하였다.
A2 구조체와같이 효율적으로 멤버들을 배치함으로써 낭비되는 공간을 줄이도록 하자.
댓글을 달아 주세요