sizeof란 무엇일까?

C언어에서 sizeof() 연산자는 피연산자의 크기를 바이트 단위로 반환하는 기능을 가지고 있습니다.

sizeof()의 리턴 타입은 size_t 이고, sizeof는 포인터, 데이터 타입, 구조체, 공용체 모두 사용 할 수 있습니다.

1. sizeof 의 사용법

(1) 피연산자가 데이터 타입일 경우

size_t size_char = sizeof(char); // 1
size_t size_int = sizeof(int); // 4
size_t size_float = sizeof(float); // 4
size_t size_double = sizeof(double); // 8

(2) 피연산자가 표현식 일때

int a = 10;
double d = 10.24;
size_t size = sizeof(a + d); // 8

해당 코드에서는 8이 저장되게 됩니다.
a + d 연산 처리시 타입이 큰 double로 형변환이 되기 때문입니다.

2. sizeof 처리 과정

sizeof는 컴파일 시간에 처리되는 경우가 있고, 런타임 시간에 처리되는 경우가 있다.

(1) 컴파일 시간 처리

#include <stdio.h>
#include <stddef.h>

int main()
{
	int i = 10;

	size_t size = sizeof(i++);
	printf("size of i : %lu\\n", (long unsigned ) size); // 4
	printf("value of i : %d\\n", i); // 10
	return 0;
}

해당 코드에서는 4, 10이 출력되게 됩니다. i++ 의 증감 연산자는 적용되지 않습니다.

그 이유는 컴파일시에 i++를 바이트 숫자인 4로 변경되기 때문입니다.

해당 코드를 어셈블리어로 살펴보면

size_t size = sizeof(i++);
													movl $0x4, 0x1c