size_t는 정확히 어떤 타입인가요?
조회수 35455회
sizeof()
가 return한다는 건 알고 있는데
그 외에는 뭐가 더 있나요?
데이터 타입이긴 한가요?
for(i = 0; i < some_size; i++)
이런 반복문을 쓸 때 i
는 int
? size_t
? 둘 중 뭘 써야 하죠?
2 답변
-
간략하게 말하면 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로 형변환을 해서 사용하다가 범위를 벗어나는 버그를 발생시킬 가능성도 있으니까요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력