sizeof 연산자는 C 언어에서 가장 널리 사용되는 연산자 중 하나입니다. 컴파일 타임에 평가되는 단항(unary) 연산자로, 피연산자의 크기를 바이트 단위로 계산하는 데 사용됩니다. 변수가 차지하는 메모리 크기를 반환하며, int나 double 같은 기본 데이터 타입은 물론 float, 포인터 타입 변수 등 어떤 자료형에도 적용할 수 있습니다.
sizeof()를 데이터 타입과 함께 사용하면 해당 타입에 할당되는 메모리의 크기를 그대로 반환합니다. 다만 실행 환경에 따라 결과가 달라질 수 있습니다. 예를 들어 동일한 데이터 타입이라도 32비트 시스템과 64비트 시스템에서 서로 다른 크기가 출력될 수 있습니다.
다음은 C 언어에서 sizeof 연산자를 사용하는 기본 예제입니다.
예제 1 – 변수와 데이터 타입의 크기 확인
#include <stdio.h>
int main() {
int a = 16;
printf("Size of variable a : %d\n",sizeof(a));
printf("Size of int data type : %d\n",sizeof(int));
printf("Size of char data type : %d\n",sizeof(char));
printf("Size of float data type : %d\n",sizeof(float));
printf("Size of double data type : %d\n",sizeof(double));
return 0;
}
실행 결과
Size of variable a : 4 Size of int data type : 4 Size of char data type : 1 Size of float data type : 4 Size of double data type : 8
위 결과에서 볼 수 있듯이 일반적인 32비트/64비트 시스템에서는 int와 float가 4바이트, char가 1바이트, double이 8바이트를 차지합니다.
한편, sizeof()를 표현식(expression)과 함께 사용하면 해당 표현식 전체의 크기를 반환합니다. 이때 서로 다른 타입이 섞여 있으면 암시적 형 변환(타입 승격)이 일어나 더 큰 타입의 크기가 결과로 나옵니다.
예제 2 – 표현식의 크기 확인
#include <stdio.h>
int main() {
char a = 'S';
double b = 4.65;
printf("Size of variable a : %d\n",sizeof(a));
printf("Size of an expression : %d\n",sizeof(a+b));
int s = (int)(a+b);
printf("Size of explicitly converted expression : %d\n",sizeof(s));
return 0;
}
실행 결과
Size of variable a : 1 Size of an expression : 8 Size of explicitly converted expression : 4
위 예제를 살펴보면 다음과 같은 흐름을 이해할 수 있습니다.
- char 타입 변수
a의 크기는 1바이트입니다. a + b처럼 char와 double이 함께 연산되면 char가 double로 자동 승격되므로, 표현식 전체의 크기는 8바이트가 됩니다.- 반면
(int)(a+b)처럼 명시적으로 int로 형 변환한 값을 저장한 변수s의 크기는 4바이트입니다.
이처럼 sizeof 연산자는 메모리 할당, 배열 크기 계산, 구조체 패딩 분석 등 다양한 상황에서 활용되는 필수 도구입니다. 플랫폼마다 데이터 타입의 실제 크기가 다를 수 있으므로, 이식성 있는 코드를 작성할 때 반드시 sizeof로 크기를 확인하는 습관을 들이는 것이 좋습니다.