구조체 메모리 크기 (Struct Memory Size): 두 판 사이의 차이
(컴퓨터 과학 용어 정리 - 구조체 메모리 크기 (Struct Memory Size) 추가) 태그: 수동 되돌리기 |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
== [C] 구조체 메모리 크기 (Struct Memory Size) == | |||
C언어에서 구조체(struct)를 사용할 때, 변수 선언 시 할당되는 메모리 공간 크기에 대해 알아보자. | |||
기업의 필기 테스트나 면접에서 자주 출제되는 유형이므로 반드시 이해하고 숙지할 필요가 있다. | |||
=== 기본 자료형의 크기 === | |||
C언어에서 자주 사용하는 기본 자료형과 그 크기는 다음과 같다. | |||
'''char''' : 1바이트 | |||
'''int''' : 4바이트 | |||
'''double''' : 8바이트 | |||
각 변수나 자료형의 크기는 sizeof 연산자를 통해 쉽게 확인할 수 있다. | |||
=== 구조체 메모리 크기 계산 규칙 === | |||
구조체가 메모리를 할당할 때는 다음 두 가지 중요한 규칙이 적용된다. | |||
'''가장 큰 크기를 가진 멤버의 자료형을 기준으로 메모리 공간을 할당'''한다. | |||
구조체의 전체 크기는 '''가장 큰 자료형의 배수'''가 되어야 하며, 이를 위해 남는 공간은 여유 공간(padding)으로 채워진다. | |||
==== 예시를 통한 이해 ==== | |||
다음 예시들을 통해 보다 쉽게 이해해 보자. | |||
1 | ==== 예시 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바이트가 구조체에 할당된다. | |||
=== 구조체 사용 시 주의사항 === | |||
구조체의 메모리 크기는 멤버의 선언 순서와 자료형의 크기에 따라 달라지므로 항상 자료형 크기를 고려하여 선언 순서를 정하는 것이 효율적이다. |
2025년 5월 5일 (월) 08:00 기준 최신판
[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바이트가 구조체에 할당된다.
구조체 사용 시 주의사항
구조체의 메모리 크기는 멤버의 선언 순서와 자료형의 크기에 따라 달라지므로 항상 자료형 크기를 고려하여 선언 순서를 정하는 것이 효율적이다.