C++ 표준이 정수형 크기를 직접 규정하지 않는 이유
C++ 표준은 정수형 타입의 크기를 바이트 단위로 명시하지 않습니다. 대신 각 타입이 반드시 표현할 수 있어야 하는 최소 값 범위만을 규정합니다. 이 최소 범위로부터 해당 타입이 가져야 할 최소 비트 수를 쉽게 계산할 수 있습니다.
예를 들어, 표준에 따르면 int는 최소 16비트, long은 최소 32비트를 보장해야 하며, 실제 구현에서는 이보다 더 클 수 있습니다.
플랫폼별 일반적인 데이터 모델
표준 자체가 아니라 실제로 널리 사용되는 플랫폼별 크기는 다음과 같습니다.
- 32비트 시스템 (ILP32) —
int,long, 포인터가 모두 32비트입니다. - 64비트 유닉스/리눅스 (LP64) —
long과 포인터는 64비트이며,int는 32비트입니다. - 64비트 윈도우 (LLP64) —
long long과 포인터는 64비트이며,long과int는 모두 32비트입니다.
이식성을 위한 팁
플랫폼마다 타입 크기가 달라지므로, 정확한 비트 폭이 필요한 코드라면 <cstdint> 헤더에서 제공하는 고정 폭 정수형인 int32_t, int64_t, uint64_t 등을 사용하는 것이 안전합니다.