✅ 목표 (Goal)

구조체 정렬이란것이 무엇인가

왜 하는가? 어떻게 하는지 알아보자.

attribute

✅ 간단한 코드를 보자.

아래 예제에서 구조체가 메모리에서 몇 바이트를 차지할까?

#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바이트를 차지할것이다. 과연?

Untitled

왜죠? 왜 그렇죠?

왜죠? 왜 그렇죠?

✅ 패딩(Padding)이란?

C에서는 구조체를 정렬할때 멤버 변수 중에서 가장 큰 자료형 크기의 배수로 정렬한다.

여기서 가장 큰 자료형은 int 4이므로, 4의 배수인 8,16,32…로 정렬한다.

이런경우 1바이트인 char은 4바이트를 맞추기 위해 3바이트만큼 남게 되는데 이를 패딩이라 한다. 들어있는값은 쓰레기값

우리가 생각한 메모리 사이즈

우리가 생각한 메모리 사이즈