프로그래밍 언어/C C++

size_t 는 무엇일까?

트리맨스 2021. 5. 28. 23:22
반응형


c프로그래밍을 하다 보면은 종종 size_t 와 같은 자료형을 볼 수 있을 것이다. c를 배운 사람이라면 int, double, long, float 등의 자료형은 흔히 봐 왔을 것이다. 하지만 size_t, ssize_t 등의 자료형도 가끔식 보인다. 이러한 자료형은 왜 있는 것일까?

동작 환경에 따른 차이


현재 대부분의 x86 컴퓨터는 32비트 또는 64비트 운영체제를 사용하고 있다. 요즘은 ARM에서도 64비트를 사용 중이다. c언어의 변수의 크기는 구동 환경에 따라 다르다. 보편적인 경우에 int형의 크기는 4바이트 (32비트)라고 알 것이다. 이는 32비트의 환경에서만 적용된다. 즉, 대부분의 변수는 동작 환경에 따라 크기가 달라진다.

하지만 size_t 의 경우에는 다르다. 보통 헤더 파일에 정의가 되어 있는데, size_t는 4바이트의 크기를 가지고 있다 (32비트 unsigned int). 이것은 환경이 바뀌어도 항상 4바이트로 고정이 되어 있다. 그래서 어디서든 4바이트의 크기(unsigned int)를 가지는 변수를 선언하고 싶을 때는 size_t로 선언하면 된다. 이와 비슷하게 ssize_t 라는 변수도 있는데, 이것은 signed int 형태를 가진다.

조금 더 나아가서 pid_t 형태도 존재한다. 이것은 리눅스 시스템에서 현재 실행하는 프로그램의 pid값을 나타내는 변수이다. 범위는 2~32768까지이다. 리눅스 pc는 32768개 이상의 프로세스를 실행하지 못한다. 왜냐하면 PID_MAX_DEFAULTS 라는 상수로 32768이 정의되어 있기 때문이다.  또한 pid_t의 자료형을 가진다. 각 컴퓨터에서 최대 실행 가능 프로세서의 수를 알고 싶으면 cat /proc/sys/kernel/pid_max 를 입력하여 값을 확인하면 된다. 내 컴퓨터는 32768이 뜬다.

변수명 size_t ssize_t pid_t
크기 4byte 4byte 4byte
범위 0 ~ 4,292,967,295 -2,147,483,648 ~ 2,147,483,648 2 ~ 32768
반응형