최근 수정 시각 : 2026-03-16 15:42:00

size_t


프로그래밍 언어 문법
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
프로그래밍 언어 문법
C(포인터 · 구조체 · 공용체 · size_t) · C++(이름공간 · 클래스 · 특성 · 상수 표현식 · 람다 표현식 · 템플릿/제약조건/메타 프로그래밍 · 코루틴) · C# · Forth · Java · Python(함수 · 모듈) · Kotlin · MATLAB · SQL · PHP · JavaScript(표준 내장 객체, this) · Haskell(모나드) ·
마크업 언어 문법
HTML · CSS
개념과 용어
함수(인라인 함수 · 고차 함수 · 콜백 함수 · 람다식) · 리터럴 · 문자열 · 식별자(예약어) · 상속 · 예외 · 조건문 · 반복문 · 비트 연산 · 참조에 의한 호출 · eval · 네임스페이스 · 호이스팅
기타
#! · == · === · deprecated · GOTO · NaN · null · undefined · S-표현식 · 배커스-나우르 표기법
}}}}}}
프로그래밍 언어 목록 · 분류 · 문법 · 예제

1. 개요2. 설명3. ssize_t

1. 개요

C/C++ 에서 쓰이는 데이터 타입이다. C80/C90 표준에 정의되어 있다.

2. 설명

size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입으로 반드시 unsigned 형으로 나타낸다. stddef.h 및 cstddef 헤더에 정의되어 있다.

아래는 C99 원문.
size_t can store the maximum size of a theoretically possible object of any type
해당 명세에 따르면 x86은 32비트, x64는 64비트 변수가 된다.

메모리 관련 표준 라이브러리 함수(malloc, memcpy, memcmp, memset, memchr 등)는 크기에 관해 항상 이 자료형을 쓴다. 운영체제에 따라 메모리 주소의 범위, 처리 가능한 최대 메모리 크기가 달라지니 운영체제에 따라 크기가 가변적인 이 자료형을 쓰는 것이다.

C++에서는 stddef.h 대신 cstddef를 include하면 std::size_t로도 쓸 수 있으며 명세도 C와 동일하다.

size_t를 형변환하거나 다른 정수형과 연산 할때에는 주의해야 한다. 앞서 언급했듯이, size_t부호없는 정수형을 나타내기 때문에 다른 정수형과 연산할 때에는 오버플로우나 언더플로우가 발생할 수 있다. 이를 방지하기 위해서는 아래와 같이 사용하고자 하는 값을 다른 자료형에 저장 후 사용하는것이 좋다.
#!syntax cpp
std::string str = "abcde";

long long len1 = str.length(); // OK, 묵시적 형변환
long long len2 = (long long)str.length(); // OK, C방식 명시적 형변환
long long len3 = static_cast<long long>(str.length()); // OK, C++방식 명시적 형변환

또한 size_t보다 더 작은 크기를 저장하는 자료형에 저장할 시에는(예: 64비트 운영체제에서 32비트에 저장하는 경우) 값이 손실될 수 있음에 유의해야 한다.

3. ssize_t

size_t의 부호형이며 목적은 비슷하다. 주로 저수준 파일 함수나 소켓 라이브러리에서 쓰이는데 이를 반환값으로 쓰이는 함수들은 에러가 발생했을때 0 이하의 값 또는 -1을 반환한다는 점이 다르다.