Love Every Moment
〔C언어〕size_t 와 unsigned int 의 차이? 본문
size_t 는 typedef 를 이용하여 정의한 하나의 별칭(alias)이다.
typedef __darwin_size_t size_t;
size_t가 정의되어 있는 <unistd>를 보면 위와 같이 정의되어 있다.
이론상 가장 큰 사이즈를 담을 수 있는 '부호 없는(unsigned) 데이터 타입'으로 생각하면 된다.
size_t 형 변수를 printf() 를 이용하여 출력하려면 %ld 또는 %zu 를 이용한다.
unsigned int 와의 차이는 운영체제에 따라 사이즈가 변하는지 여부에 있다.
size_t 의 경우에는 32비트 운영체제 아래에서 '부호 없는 32비트 정수(unsigned int)',
64비트 운영체제 아래에서 '부호 없는 64비트 정수(unsigned long long)'로써 고정된 사이즈를 가진다.
하지만 unsigned int 의 경우에는 64비트 운영체제 아래에서 꼭 64비트 사이즈를 가진다고 보장할 수 없어 가변적이다.
따라서 unsigned int 를 사용하면 컴파일하는 시스템마다 변수의 크기가 달라지므로 고정된 size_t 를 사용하는 것이다.
참고하면 좋은 글:
There are 5 standard unsigned integer types in C:
- unsigned char
- unsigned short
- unsigned int
- unsigned long
- unsigned long long
size_t is a typedef (i.e., an alias) for some unsigned type, (probably one of the above but possibly an extended unsigned integer type, though that's unlikely). It's the type yielded by the sizeof operator.
On one system, it might make sense to use unsigned int to represent sizes; on another, it might make more sense to use unsigned long or unsigned long long. (size_t is unlikely to be either unsigned char or unsigned short, but that's permitted).
The purpose of size_t is to relieve the programmer from having to worry about which of the predefined types is used to represent sizes.
Code that assumes sizeof yields an unsigned int would not be portable. Code that assumes it yields a size_t is more likely to be portable.
출처: 스택 오버플로우
키워드 컴퓨터 코딩 프로그래밍
'PROGRAMMING::LANGUAGE > C' 카테고리의 다른 글
〔C언어〕댕글링 포인터(Dangling Pointer)란? (0) | 2021.05.27 |
---|---|
〔C언어〕정적 변수(Static Variable)란? (0) | 2021.05.19 |
〔CS50 / C언어〕자료구조: 메모리 할당, 연결 리스트, 해시 테이블, 트라이, 스택, 큐, 딕셔너리 (0) | 2021.02.26 |
〔CS50 / C언어〕메모리: 포인터, 문자열, 메모리 할당과 해제, 파일 쓰고 읽기 (0) | 2021.02.16 |
〔CS50 / C언어〕알고리즘: 선형·이진 검색, 버블·선택·병합 정렬, 재귀 함수 (0) | 2021.02.02 |