Search
Duplicate

size_t 란 ?

간단소개
size_t 는 뭐하는 녀석이지...?
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
개발지식
Scrap
태그
자료형
size_t
c언어
9 more properties
안녕하세요! 5기 gulee입니다. libft를 하면서 많은 동료분들과 대화를 해보고 size_t를 모르고 사용하시는 분들도 있겠구나 싶어서 이렇게 글로 작성하게 되었습니다!

size_t란 무엇일까?

우리는 libft를 하다보면 자료형에서 size_t라는 자료형을 처음 본 사람도 있을거고, 그 전에 stdio.h의 소스파일들을 뜯어본 사람들은 봤을 자료형이다.
그리고 size_t는 뒤에 _t라는 것에서 힌트가 있다! 바로 typedef 그러니까 다른 자료형에 별칭을 붙힌 것이다. 플랫폼에 따라 다른 자료형을 쓰기 위해서 size_t를 typedef 한 것이다.
이제부터 우리가 봐왔던 size_t라는 자료형에 대해서 알아보자!
우선, size_t를 설명드리기 전에 알아둬야 할 것이 있다. 그건 바로!!!!!! C라는 언어 대해서 조금은 알고 넘어가야 할 것 같다.
1.
C라는 언어는 우리가 흔하게 사용하고 있는 컴퓨터에서만 사용하는 언어가 아니다. 다양한 플랫폼에서 사용을 할 수 있는 언어이기 때문에 포팅문제를 항상 생각해야 하는 언어이다.
2.
예전엔 16비트 컴퓨터가 흔하기도 했다. 그래서 C표준에서는 int자료형의 크기는 " 최소 16bit short보단 크다 " 로 설명이 되어있다. C표준에서는 자료형들을 찾아보면 최소단위만 있다는 걸 알 수 있다.
3.
size_t의 최소 크기는?
size_t의 크기는 C99에 명시가 되어 있는데, 최소 16bit를 요구했다.
여기서 딱! 생각나는 부분이 있을 것 같다. 바로 int자료형도 최소 16bit를 요구했던 것을 기억할 것이다. 그때 당시에 int자료형이 16비트 컴퓨터에서 모든 정수형을 다 표현할 수 있던 정수 자료형이 였기 때문인 것 같다.
그래서 32bit 환경에서는 흔하게 unsigned int 로 되어 있는 경우가 많다.
여기서 잠깐! 왜? 64bit에서 64bit로 하고 32bit 에선 32bit로 할까요?
64bit 32bit는 보통 CPU가 한 번에 처리할 수 있는 데이터의 크기 (=워드, word)를 말한다. 워드 크기와 레지스터 크기랑 일치한다.
64bit에서 64bit가 아닌 32bit의 데이터를 처리한다고 가정을 했을때 그 남은 32bit자리를 다른 걸로 채우거나 해야하는 작업을 한 번 더 처리해야하기 때문에 64bit의 데이터를 처리하는 것보다 속도가 느리다고 할 수 있다.

1. size_t의 용도

보통은 어떤 것의 크기를 나타내기 위해서 사용을 하는데, 특히 자주 사용하는 곳은 어떤 배열의 lenth를 구하거나 index를 이용해서 배열에 접근할때 많이 사용을 한다.
특히나 반복문에서 사용을 하는데, 그 이유는 반복문에서 index를 count 할때 우리가 -1, -2, -3 이렇게 카운터를 하지 않기 때문에 signed 자료형을 사용하지 않아도 된다. 이런경우 그냥 size_t라는 자료형을 쓸 수 있다.

2. size_t의 자료형의 크기

size_t라는 자료형은 현재 우리가 사용하고 있는 64bit os환경에서 컴파일 할때 대부분이 64bit로 컴파일 된다. unsigned long long 또는 unsigned long int 이런식으로 되어있을 것이다.

3. size_t의 사용하는 이유에 대한 나의 의견은?

위에 설명 했듯이, unsigned long int 라는 자료형은 보통의 컴파일러는 64bit로 컴파일 하기 때문에, word 크기와 같아서 속도가 가장 빠르다고 추론할 수 있다. 그래서 나는 부호있는 정수형을 사용해야 한다면 부호있는 정수형을 사용하는게 맞고, 만약 부호를 사용하지 않는 정수형을 사용해야 한다면 size_t를 사용하는 것도 하나의 좋은 방법인 것 같다....!!
그리고 잊지말자... 모든 자료형은 최소 요구사항만 있을 뿐이다..! 컴파일러마다 다 다르다..!!! 그래서 C는 여러 플랫폼에 프로그램을 만들어야 하는 개발자는 포팅까지 생각해야 한다는....? 임베디드 화이팅...!!