구조체 메모리 크기 (Struct Memory Size)
[C] 구조체 메모리 크기 (Struct Memory Size)
C언어에서 구조체(struct)를 사용할 때, 변수 선언 시 할당되는 메모리 공간 크기에 대해 알아보자.
기업의 필기 테스트나 면접에서 자주 출제되는 유형이므로 반드시 이해하고 숙지할 필요가 있다.
기본 자료형의 크기
C언어에서 자주 사용하는 기본 자료형과 그 크기는 다음과 같다.
char : 1바이트
int : 4바이트
double : 8바이트
각 변수나 자료형의 크기는 sizeof 연산자를 통해 쉽게 확인할 수 있다.
구조체 메모리 크기 계산 규칙
구조체가 메모리를 할당할 때는 다음 두 가지 중요한 규칙이 적용된다.
가장 큰 크기를 가진 멤버의 자료형을 기준으로 메모리 공간을 할당한다.
구조체의 전체 크기는 가장 큰 자료형의 배수가 되어야 하며, 이를 위해 남는 공간은 여유 공간(padding)으로 채워진다.
예시를 통한 이해
다음 예시들을 통해 보다 쉽게 이해해 보자.
예시 1
int main() { printf("메모리 크기 = %d\n", sizeof(S)); // 출력: 8 return 0; }
실제 필요한 공간은 char(1바이트)와 int(4바이트)를 합쳐 총 5바이트이다. 그러나 가장 큰 멤버인 int를 기준으로 4바이트씩 구성되어야 하므로, 구조체의 크기는 8바이트가 된다. 따라서 3바이트의 여유 공간이 생긴다.
예시 2
이 경우에도 총 8바이트가 할당된다. char 멤버 두 개(a와 b)는 한 번에 4바이트 공간에 배치되고, 나머지 2바이트는 여유 공간으로 처리된다.
예시 3 (멤버 선언 순서에 따른 차이)
이 경우 멤버들의 선언 순서로 인해 메모리 공간이 각각 따로 구성되면서, 중간마다 padding이 발생해 총 12바이트가 필요하게 된다. 따라서 구조체를 선언할 때는 자료형 크기별로 정렬하여 선언하는 것이 메모리 절약에 효과적이다.
예시 4
여기서는 가장 큰 자료형이 double(8바이트)이므로, 기본 메모리 할당 단위는 8바이트다. 결과적으로 총 16바이트가 구조체에 할당된다.
구조체 사용 시 주의사항
구조체의 메모리 크기는 멤버의 선언 순서와 자료형의 크기에 따라 달라지므로 항상 자료형 크기를 고려하여 선언 순서를 정하는 것이 효율적이다.