본문 바로가기
C언어/C언어

[C언어]size_t 자료형과 사용할 때 주의점(size_t VS unsigned int)

by Oliver_Candy 2023. 1. 12.

이번에는 size_t자료형에 대해서 알아보고 size_t와 unsigned int의 차이점은 무엇인지 size_t를 사용할 때 주의할 점을 알아보자.

 

 size_t 자료형

  • <stdio.h> <stdlib.h> <string.h> <time.h> 헤더를 인클루드해야 사용가능
  • 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입
  • 부호없는 정수형이지만 실제 데이터형은 아님
  • _t 를 보다 시피 size_t는 typedef를 이용한 다른 자료형의 별칭
  • 보통 unsigned int를 사용
  • 용도: 배열의 길이나 배열의 인덱스를 나타낼 때 사용
  • (size_t) -1은 비트패턴에 의해서 size_t 최대값으로 인식된다.( -1의 비트패턴은 1바이트 기준 1111 1111$_{(2)}$이다.)

 

 

 

 

그렇다면 size_t 자료형을 그냥 unsigned int로 사용하면 되지 왜 굳이 size_t로 정의를 해서 사용할까?

 

size_t 자료형은 해당 시스템(운영체제)에서 포함할 수 있는 최대 크기의 데이터를 정의하는데 있다.

그래서 size_t 크기는 32비트 운영체제(OS)에서는 32bit(=4byte)의 부호없는 자료형이 되고 64비트 운영체제(OS)에서는 64bit(=8byte)의 부호없는 자료형으로 정의를 해야 한다.

하지만 unsigned int는 32비트, 64비트 운영체제마다 무조건 32bit, 64bit로 정의되어 있지 않기 때문에 unsigned int를 사용할 수 없다.

 

 size_t를 사용할 때 주의해야 할 점

size_t는 unsigned 자료형이기 때문에 signed 자료형과 계산을 하거나 비교연산을 할 때 형변환이 signed에서 unsigned로 변하게 되는데 이 때 signed 자료형이 음수라면 unsigned 자료형으로 변할 때 양수로 변하게 되어 원하는 계산 결과가 나오지 않게 된다. 

그래서 size_t를 사용할 때는 size_t끼리의 연산을 주로 하는 것이 좋고, 만약에 음수의 signed 자료형과 계산을 하게 된다면 size_t를 명시적 형변환을 사용하여 signed 자료형으로 변환해주는 것이 좋다.

형변환에 대해서 좀 더 자세한 부분은 다음 글에 작성하겠다.

 

 

 

댓글