프로그래밍언어/C언어[초급]

[C언어][초급] Chapter13. 자료형 크기와 sizeof 연산자 – 메모리 크기를 알아보자

about_IT 2025. 4. 16. 19:55

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));