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


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

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

  • 2016년 01월 29일에 작성됨

조회수 538


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.

  • 2016년 01월 29일에 작성됨


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

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

  • 2016년 09월 13일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close