[C언어][초급] Chapter13. 자료형 크기와 sizeof 연산자 – 메모리 크기를 알아보자
C언어에서는 모든 변수나 상수가 메모리에 저장되며, 자료형에 따라 **필요한 메모리 크기(바이트)**가 달라집니다.
예를 들어 정수형 int는 4바이트, 문자형 char는 1바이트 정도를 차지하죠.
이때 변수나 자료형이 정확히 몇 바이트를 사용하는지 확인하고 싶을 때 사용하는 도구가 바로 sizeof 연산자입니다.
이번 글에서는 C언어의 기본 자료형이 차지하는 크기와 sizeof 연산자의 사용법을 자세히 알아보겠습니다.
● 자료형마다 크기가 다른 이유
자료형마다 표현할 수 있는 범위가 다르기 때문에, 메모리에서 차지하는 크기도 다릅니다.
예를 들어 char는 1바이트(8비트)로 -128 ~ 127 범위의 정수만 저장할 수 있지만, int는 4바이트로 훨씬 더 넓은 정수 범위를 저장할 수 있습니다.
자료형의 크기를 알아두면:
- 메모리 최적화
- 데이터 처리 속도 개선
- 데이터 타입 캐스팅 시 오류 방지 등에 도움이 됩니다.
● sizeof 연산자란?
sizeof는 자료형이나 변수의 크기(바이트 단위)를 알려주는 연산자입니다.
괄호 안에 자료형 이름 또는 변수명을 넣으면, 해당 항목이 차지하는 메모리 크기를 반환합니다.
printf("%lu\n", sizeof(int)); // int형의 바이트 크기 출력
- 반환값의 타입은 unsigned long이므로, %lu를 사용합니다.
- 괄호는 자료형일 때는 반드시 써야 하며, 변수일 때는 생략도 가능합니다.
● 자주 사용하는 기본 자료형 크기 (일반적인 기준)
자료형 | 크기(Byte) | 설명 |
char | 1 | 문자 1개 |
short | 2 | 작은 정수 |
int | 4 | 기본 정수형 |
long | 4 또는 8 | 더 큰 범위의 정수 |
float | 4 | 소수점 포함 실수 |
double | 8 | 배정밀도 실수 |
long double | 8~16 | 시스템에 따라 다름 |
※ 컴퓨터의 시스템과 컴파일러에 따라 값이 다를 수 있습니다.
→ 직접 sizeof로 확인해보는 것이 가장 정확합니다.
● 예제: sizeof 사용해보기
#include <stdio.h>
int main(void) {
int a = 10;
double b = 3.14;
printf("int형 변수 a의 크기: %lu바이트\n", sizeof(a));
printf("double형 변수 b의 크기: %lu바이트\n", sizeof(b));
printf("char형의 크기: %lu바이트\n", sizeof(char));
printf("float형의 크기: %lu바이트\n", sizeof(float));
return 0;
}
● 주의할 점
- sizeof는 연산자이므로 함수 호출처럼 괄호 안에 인자를 넘기는 것이 아니라, 컴파일 시 계산되는 정적인 연산입니다.
- 배열의 크기도 확인할 수 있으며, 포인터나 구조체 등 다양한 대상에 사용 가능합니다.
int arr[10];
printf("%lu\n", sizeof(arr)); // 배열 전체 크기 (4바이트 × 10 = 40)
printf("%lu\n", sizeof(arr[0])); // 배열의 한 요소 크기 (int형 = 4)
sizeof 연산자는 변수나 자료형이 메모리에서 얼마나 공간을 차지하는지 직접 확인할 수 있는 유용한 도구입니다.
프로그램의 효율성과 안정성을 높이기 위해서는 자료형의 크기와 특성을 이해하고, sizeof를 통해 그 크기를 확인하며 코드를 작성하는 습관이 필요합니다.
실습 문제
아래 문제는 직접 코드를 작성해보고, 실행 결과를 확인한 후 스스로 정답을 유추해보는 형태입니다.
정답은 바로 아래에서 확인할 수 있습니다.
문제 1
정수형 변수 a를 선언하고, sizeof를 이용해 변수 a의 크기를 출력하세요.
문제 2
char, short, int, double 자료형의 바이트 크기를 각각 출력해보세요.
문제 3
배열 int arr[5];가 있을 때, 배열 전체의 크기와 배열 한 요소의 크기를 각각 출력하세요.
문제 4
다음 코드의 출력 결과를 예측해보세요.
printf("%lu\n", sizeof(3.14f));
문제 5
아래 코드에서 잘못된 부분을 찾아 수정하세요.
int x = 100;
printf("크기: %d바이트\n", sizeof(x));
▶ 정답 확인하기
정답 1
int a = 10;
printf("a의 크기: %lu바이트\n", sizeof(a));
정답 2
printf("char: %lu\n", sizeof(char));
printf("short: %lu\n", sizeof(short));
printf("int: %lu\n", sizeof(int));
printf("double: %lu\n", sizeof(double));
정답 3
int arr[5];
printf("배열 전체 크기: %lu바이트\n", sizeof(arr)); // 예: 20 (4*5)
printf("배열 한 요소 크기: %lu바이트\n", sizeof(arr[0])); // 예: 4
정답 4
4
정답 5
// %d는 int형, sizeof는 unsigned long 반환 → %lu 사용해야 함
printf("크기: %lu바이트\n", sizeof(x));