size_t는 정확히 어떤 타입인가요?

조회수 35367회

sizeof()가 return한다는 건 알고 있는데 그 외에는 뭐가 더 있나요? 데이터 타입이긴 한가요?

for(i = 0; i < some_size; i++) 이런 반복문을 쓸 때 iint? size_t? 둘 중 뭘 써야 하죠?

2 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    간략하게 말하면 1999 ISO C 표준(C99)은 size_t는 객체의 크기를 나타내기 위해서 쓰이는 16비트 이상의 unsigned int타입이라고 정의합니다. (제일 밑에 원문을 첨부해뒀습니다.)

    for 루프를 도는 경우, i가 항상 양수일 경우는 int/size_t 중 어느 걸 써도 무방한데요 다만 int를 쓰는 경우는 오버플로우가 날 수 있으니 i의 값이 너무 커진다 싶을 때는 size_t를 써야 합니다.

    그리고 size_t는 항상 양수이므로 i가 음수가 될 수 있는 경우는 당연히 int를 써야 합니다.

    원문 :

    size_t is an unsigned data type defined by several C/C++ standards, e.g. the C99 ISO/IEC 9899 standard, that is defined in stddef.h.1 It can be further imported by inclusion of stdlib.h as this file internally sub includes stddef.h.

    This type is used to represent the size of an object. Library functions that take or return sizes expect them to be of type or have the return type of size_t. Further, the most frequently used compiler-based operator sizeof should evaluate to a constant value that is compatible with size_t. As an implication, size_t is a type guaranteed to hold any array index.

  • size_t에 대해 잘못 알고 있는 분들 정말 많군요. 원문 어디에도 unsigned int 라는 말은 없습니다. size_t는 '이론상 가장 큰 사이즈를 담을 수 있는 unsigned 데이터 타입'으로 정의됩니다. 즉, 32비트 머신에서는 32비트 사이즈의 unsigned 정수형(int가 아니라 그냥 '정수'를 의미합니다), 64비트 머신에서는 64비트 사이즈의 unsigned 정수형(unsigned long long)입니다. 향후 등장할지도 모르는 128비트 머신이라던가 더 큰 머신이 존재한다면 그에 따라 더 큰 사이즈가 되겠지요.

    이 내용은, 동영상 파일같이 4기가를 넘어가는 파일들을 처리하거나 큰 데이터를 처리하려 할 때 이 사실을 반드시 알고 있는게 좋습니다. 어설프게 unsigned int인줄 알고 int나 unsigned int로 형변환을 해서 사용하다가 범위를 벗어나는 버그를 발생시킬 가능성도 있으니까요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)