C 언어 | 구조체 선언 | 형의 사이즈 - sizeof


값 또는 정의된 형식에서 해당 인스턴스를 저장하는데 필요한 저장 공간의 사이즈를 얻으려면 sizeof 연산자를 사용한다.

값의 크기를 얻기

어떤 변수도 구조체나 공용체의 인스턴스에 값을 저장하기 위한 메모리 공간이 할당되어 있다. 예를 들어 int 형은 32비트 컴퓨터에서 4바이트의 메모리 영역을 할당한다. 즉, int 변수를 사용하면 메모리를 4바이트 소비할 것이다. 요즘에는 메모리의 대용량화에 따라, 개발자가 용량을 크게 걱정할 필요가 없게 되었지만, 메모리는 프로그래밍에서 중요한 요소이다.

C 언어에서 변수와 형식에서 사이즈를 얻을 sizeof 연산자를 사용해 형태 크기를 확인할 수 있다. sizeof 연산자는 지정한 값의 바이트 수를 돌려준다. sizeof가 반환하는 정수 값을 사용하여, 포인터 연산과 구조체의 작업에 응용할 수 있다.

sizeof 연산자

sizeof 식

이것으로 식으로 지정된 변수와 형식의 메모리 크기를 얻을 수 있다. sizeof 연산자로 지정하는 식은 일반적으로 어떤 식별자(변수명)이다.

코드1

#include <stdio.h>

int main() {
 char c;
 short si;
 int i;

  printf("char = %d : short = %d : int = %d\n" ,
   sizeof c , sizeof si , sizeof i
 );
  return 0;
}

코드1에는 char 형 변수 c, short 형의 변수 si, 그리고 int형의 변수 i의 크기를 sizeof 연산자 조사하고 이를 표시한다. 결과는 시스템에 따라 다르지만, char의 크기는 반드시 1이 될 것이다. 만약 32비트 컴퓨터이면 int형의 크기는 4바이트, short는 2바이트인 것으로 예상된다. sizeof 연산자를 사용하여 사용중인 시스템에서 C 언어 단순형이 몇 바이트의 메모리를 할당하고 있는지를 정확하게 확인할 수 있다.

그러나 형의 사이즈를 확인하고 싶은 것 뿐인데, 일부러 사용하지 않는 변수를 작성하는 것은 낭비이다. sizeof 연산자는 식을 지정 이외에 괄호로 둘러싼 형를 지정할 수 있다. 따라서 값이 아닌 형명에서 크기를 확인할 수 있다.

sizeof 연산자

sizeof (형식 지정자)

형식 지정자는 단순형뿐만 아니라, 구조체 형이나 typedef 명을 지정할 수 있다.

코드2

#include <stdio.h>

typedef struct { int x , y; } Point;
typedef union {
  char c;
 short si;
 int i;
} Value;

int main() {
  printf("Point = %d : Value = %d\n" , sizeof(Point) , sizeof(Value));
 return 0;
}

코드2는 sizeof 연산자에 형을 지정한다. 그러면 Point 구조체와 Value 공용체의 바이트 크기를 얻을 수 있다. Point 구조체는 sizeof (int) * 2와 같고, Value 공용체는 사이즈가 가장 큰 멤버 int에 동일한 크기임을 확인할 수 있다.