C++에서 int와 long 자료형의 크기는 고정되어 있지 않으며, 시스템 아키텍처와 운영체제에 따라 달라집니다. 이 글에서는 각 환경별 데이터 모델 표준과 실제 자료형 크기를 살펴보겠습니다.
32비트 시스템: ILP32 표준
32비트 시스템에서는 일반적으로 ILP32 표준을 따릅니다. 이 표준에서는 int, long, 그리고 포인터 변수가 모두 32비트입니다.
64비트 시스템: LP64와 LLP64
64비트 시스템은 운영체제에 따라 두 가지 데이터 모델로 나뉩니다.
- 리눅스(Linux) — LP64:
long과 포인터는 64비트이지만,int는 32비트입니다. - 윈도우(Windows) — LLP64:
long long은 64비트이지만,int와long은 여전히 32비트입니다.
예제 코드
sizeof 연산자를 활용하면 현재 시스템에서 각 자료형의 실제 크기를 확인할 수 있습니다.
#include <iostream>
using namespace std;
int main() {
cout << "Size of int: " << sizeof(int) * 8 << " bits" << endl;
cout << "Size of long: " << sizeof(long) * 8 << " bits" << endl;
cout << "Size of long long: " << sizeof(long long) * 8 << " bits" << endl;
return 0;
}
실행 결과
Size of int: 32 bits Size of long: 32 bits Size of long long: 64 bits
참고: 이식 가능한 코드 작성하기
C++ 표준은 int의 최소 크기(16비트 이상)만 보장할 뿐 정확한 크기를 명시하지 않습니다. 따라서 플랫폼 간 이식성이 중요한 코드라면 <cstdint> 헤더에서 제공하는 고정 폭 정수형(int32_t, int64_t 등)을 사용하는 것이 좋습니다. 이를 통해 어떤 시스템에서든 일관된 자료형 크기를 보장받을 수 있습니다.