Namespaces
Variants

sizeof operator

From cppreference.net

객체 또는 타입의 크기를 조회합니다.

객체의 실제 크기를 알아야 할 때 사용됩니다.

목차

구문

sizeof( type ) (1)
sizeof expression (2)

두 버전 모두 size_t 타입의 값을 반환합니다.

설명

1) type object representation 크기를 바이트 단위로 반환합니다.
2) expression 의 타입 객체 표현의 크기를 바이트 단위로 반환합니다. expression 에는 암시적 변환이 적용되지 않습니다.

참고 사항

컴퓨터 아키텍처에 따라, byte 는 8비트 이상으로 구성될 수 있으며, 정확한 수치는 CHAR_BIT 로 제공됩니다.

sizeof ( char ) , sizeof ( signed char ) , 그리고 sizeof ( unsigned char ) 는 항상 1 을 반환합니다.

sizeof는 함수 타입, 불완전한 타입들( void 포함), 또는 bit-field lvalues와 함께 사용할 수 없습니다.

구조체나 공용체 타입의 피연산자에 적용될 경우, 결과는 내부 및 후행 패딩을 포함한 해당 객체의 총 바이트 수입니다. 후행 패딩은 해당 객체가 배열의 요소일 경우, 이 배열의 다음 요소의 정렬 요구사항이 충족되도록 합니다. 즉, sizeof ( T ) T [ ] 배열의 요소 크기를 반환합니다.

만약 type VLA 타입이고 크기 표현식의 값을 변경하는 것이 sizeof 의 결과에 영향을 미치지 않는다면, 크기 표현식이 평가되는지 여부는 명시되어 있지 않습니다.

(C99부터)

expression 의 타입이 VLA 가 아닌 경우를 제외하고, (C99부터) expression 은 평가되지 않으며 sizeof 연산자는 정수 상수 표현식 에서 사용될 수 있습니다.

expression 의 타입이 가변 길이 배열 타입인 경우, expression 이 평가되고 평가 결과 배열의 크기가 런타임에 계산됩니다.

(C99부터)

모든 array a including VLA (since C99) 의 요소 개수는 sizeof a / sizeof a [ 0 ] 표현식으로 결정할 수 있습니다. 만약 a 가 pointer type(예: array-to-pointer conversion 이후나 함수 매개변수 타입 조정 시)을 가진다면, 이 표현식은 단순히 pointer type의 바이트 수를 가리키는 타입의 바이트 수로 나누게 됩니다.

키워드

sizeof

예제

샘플 출력은 64비트 포인터와 32비트 int를 가진 플랫폼에 해당합니다.

#include <stdio.h>
int main(void)
{
    short x;
    // type argument:
    printf("sizeof(float)          = %zu\n", sizeof(float));
    printf("sizeof(void(*)(void))  = %zu\n", sizeof(void(*)(void)));
    printf("sizeof(char[10])       = %zu\n", sizeof(char[10]));
//  printf("sizeof(void(void))     = %zu\n", sizeof(void(void))); // Error: function type
//  printf("sizeof(char[])         = %zu\n", sizeof(char[])); // Error: incomplete type
    // expression argument:
    printf("sizeof 'a'             = %zu\n", sizeof 'a'); // type of 'a' is int
//  printf("sizeof main            = %zu\n", sizeof main); // Error: Function type
    printf("sizeof &main           = %zu\n", sizeof &main);
    printf("sizeof \"hello\"         = %zu\n", sizeof "hello"); // type is char[6]
    printf("sizeof x               = %zu\n", sizeof x); // type of x is short
    printf("sizeof (x+1)           = %zu\n", sizeof(x + 1)); // type of x+1 is int
}

가능한 출력:

sizeof(float)          = 4
sizeof(void(*)(void))  = 8
sizeof(char[10])       = 10
sizeof 'a'             = 4
sizeof &main           = 8
sizeof "hello"         = 6
sizeof x               = 2
sizeof (x+1)           = 4

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.5.3.4 sizeof 및 alignof 연산자 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 6.5.3.4 sizeof 및 _Alignof 연산자 (p: TBD)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.5.3.4 sizeof 및 _Alignof 연산자 (p: 90-91)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.5.3.4 sizeof 연산자 (p: 80-81)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.3.3.4 sizeof 연산자

참고 항목

C++ 문서 에 대한 sizeof 연산자