Love Every Moment

〔C언어〕size_t 와 unsigned int 의 차이? 본문

PROGRAMMING::LANGUAGE/C

〔C언어〕size_t 와 unsigned int 의 차이?

해 송 2021. 5. 7. 18:12
반응형

 

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 를 사용하는 것이다.

 

참고하면 좋은 글:

 

[C언어] 데이터 타입 비교 - int, unsigned int, size_t

int 32bit 컴퓨터 기준으로 정수가 32bit (4byte) 크기라고 가정한다면 int 자료형은 2의 32제곱의 값(4,294,967,296)을 표현할 수 있다. 음수, 0, 양수를 포함하여 최소 -2,147,483,648에서 최대 2,147,483,647까..

code4human.tistory.com

 


 

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.

 

출처: 스택 오버플로우

 

 

 

Difference between size_t and unsigned int?

I am so confused about size_t. I have searched on the internet and everywhere mentioned that size_t is an unsigned type so, it can represent only non-negative values. My first question is: if it i...

stackoverflow.com

 

 

 

키워드 컴퓨터 코딩 프로그래밍 

 

 

반응형
Comments