구조체 정렬이란것이 무엇인가
왜 하는가? 어떻게 하는지 알아보자.
아래 예제에서 구조체가 메모리에서 몇 바이트를 차지할까?
#include <stdio.h>
typedef struct _exo_t {
char a; // 1
int b; // 4 // 5? 8!
} exo_t;
int main() {
exo_t exo = { 0xAA, 0xEEDDCCBB};
printf("exo.a size is %2d\\r\\n", sizeof(exo.a));
printf("exo.b size is %2d\\r\\n", sizeof(exo.b));
printf("exo size is %2d\\r\\n", sizeof(exo));
return 0;
}
(1)=1
(2)=4
따라서 총 5바이트를 차지할것이다. 과연?
왜죠? 왜 그렇죠?
C에서는 구조체를 정렬할때 멤버 변수 중에서 가장 큰 자료형 크기의 배수로 정렬한다.
여기서 가장 큰 자료형은 int 4이므로, 4의 배수인 8,16,32…로 정렬한다.
이런경우 1바이트인 char은 4바이트를 맞추기 위해 3바이트만큼 남게 되는데 이를 패딩이라 한다. 들어있는값은 쓰레기값
우리가 생각한 메모리 사이즈