size_t 자료형

size_t와 ssize_t에 대해 알아보자.

man

man 명령어를 통해 살펴본 시스템 콜 함수 write()이다.
인자로 size_t 자료형 count를 갖고,
ssize_t 자료형의 값을 반환하는 것을 확인할 수 있다.
두 자료형은 무엇일까?

size_t 자료형은 ‘현 시스템이 한 번에 처리할 수 있는 최대 크기의 unsigned 정수 자료형’ 이고,
ssize_t 자료형은 ‘현 시스템이 한 번에 처리할 수 있는 최대 크기의 signed 정수 자료형’ 이다.

따라서 32비트 시스템에선 두 자료형의 크기는 4바이트이고
64비트 시스템에선 8바이트다.
64비트 우분투에서 다음과 같은 프로그램을 실행해 보았다.

#include <stdio.h>

int main()
{
  printf("size_t: %ld\n", sizeof(size_t));
  printf("ssize_t: %ld\n", sizeof(ssize_t));
  return 0;
}

result

두 자료형은 /usr/lib/gcc/ … /include 디렉토리 내 stddef.h 파일에 정의돼 있다.

stddef

size_t 자료형은 long unsigned int = unsigned long 으로,
ssize_t 자료형은 long 으로 정의되어 있음을 확인할 수 있다.