카테고리
게시일
Dec 22, 2025
sizeof
모두가 알다시피 sizeof는 자료형, 또는 문장의 결과에 대한 크기를 반환한다. 정확히는 byte 단위의 크기를 반환한다. 즉 4바이트의 자료형은 4가 반환이 될 것이고, 8바이트의 자료형은 8이 반환될 것이고, 32바이트의 구조체는 32가 반환이 될 것이다. sizeof는 동적할당, 그리고 배열의 순회 등에 흔히 사용된다.
int length = sizeof(arr)/sizeof(arr[0]); // 배열 arr의 원소개수 Node* node = (Node*)malloc(sizeof(Node)); // 구조체 Node 동적할당
sizeof안에 문장이 오면, casting된 자료형의 크기를 반환한다.
printf("%d",sizeof(3.14+'a')); // 8 반환 printf("%d",sizeof((float)(3.14+'a'))); // 4 반환
물론 아키텍쳐에 따라 1 byte의 크기가 8 bit가 아닐 수도 있다. C standard library의 limits.h의 CHAR_BIT 매크로를 확인하면 확인할 수 있다.
기본적으로 함수형, C++의 incomplete 형, 비트필드 외에 모든 자료형에 대해 사용할 수 있다.
sizeof로 반환되는 값은 어떤 type으로 처리될까? 자료형의 크기가 음수가 될 수는 없으므로 확실한 것은 unsigned 처리가 될 것이라는 것은 짐작할 수 있다.
int arr[100]; for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++){ // warning 발생 arr[i] = 0; }
위와 같은 코드는 warning이 발생한다. 당장 위 코드의 경우에는 사용하는데 지장은 없지만, 맞지 않은 자료형은 예상치 못한 곳에서 오류를 발생시킬 수도 있다.
size_t type
이런 모호함을 해소하기 위해서는 c표준의 size_t 자료형을 사용하는 것이 좋다. sizeof의 연산의 결과를 저장하기 위한 자료형으로 size_t가 정의되어있다.
나의 경우에는 4바이트의 unsigned int형으로 선언되어있다.