운영체제별 C++ 자료형의 크기와 범위
C++의 변수 앞에는 자료형(데이터 타입)을 지정할 수 있습니다.
자료형 타입은 다양한 크기와 다양한 표현(정수, 실수, 문자)이 존재하며, 사용하고자 하는 목적에 맞게 지정할 수 있습니다.
C++의 운영체제(16, 32, 64비트)별 자료형들의 크기가 어떻게 되는지 한 번 알아보겠습니다.
플랫폼별 자료형 크기
Windows와 Unix, Linux에서 C++ 자료형의 크기는 일반적으로는 서로 차이가 없습니다. 하지만, 이는 컴파일러마다 다를 수 있으며, 특정 시스템에서는 다른 크기를 가질 수 있습니다.
| 자료형 | 16비트 시스템 | 32비트 시스템 | 64비트 시스템 | |
|---|---|---|---|---|
| 논리1 | bool | 1 byte | 1 byte | 1 byte |
| 문자 | char | 1 byte | 1 byte | 1 byte |
| 정수형 | short | 2 byte | 2 byte | 2 byte |
| int | 2 byte | 4 byte | 4 byte | |
| long | 4 byte | 4 byte | 4 byte (윈도우) 8 byte (유닉스/리눅스) | |
| long long | 8 byte | 8 byte | 8 byte | |
| 실수형 | float | 4 byte | 4 byte | 4 byte |
| double | 8 byte | 8 byte | 8 byte | |
| long double | 8 byte | 8 byte | 8 byte | |
| 주소 | pointer | 2 byte(16bit) | 4 byte(32bit) | 8 byte(64bit) |
Windows와 Unix, Linux 시스템 간의 주요 차이점은 long 자료형입니다.
Windows에서는 long이 항상 4바이트였던 것에 반해 Unix와 Linux에서는 long의 크기가 시스템의 비트에 따라 변하면서 32비트 시스템에서는 4바이트, 64비트 시스템에서는 8바이트를 차지합니다.
또한, long double의 경우에는 Visual studio의 컴파일러를 기준으로 8바이트로 표시하였습니다. 그러나 다른 컴파일러나 시스템에서는 더 큰 크기를 가질 수도 있습니다.
위의 표는 일반적인 경우를 보여주며, 특정 컴파일러나 시스템에서는 다르게 설정될 수 있음을 유의해야 합니다.
자료형 범위
다음은 32bit Windows 운영체제에서 Visual Studio 컴파일러 기준 자료형 범위입니다.
| 자료형 | 크기 | 최소 값 | 최대 값 |
|---|---|---|---|
| 문자형 | |||
| char | 1 byte (8bit) | -128 | 127 |
| wchar_t | 2 byte (16bit) | 0 | 65,535 |
| 정수형 | |||
| bool | 1 byte (8bit) | false | true |
| unsigned char | 1 byte (8bit) | 0 | 255 |
| short | 2 byte (16bit) | -32,768 | 32,767 |
| unsigned short | 2 byte (16bit) | 0 | 65,535 |
| int | 4 byte (32bit) | -2,147,483,648 | 2,147,483,647 |
| unsigned int | 4 byte (32bit) | 0 | 4,294,967,295 |
| long | 4 byte (32bit) | -2,147,483,648 | 2,147,483,647 |
| unsigned long | 4 byte (32bit) | 0 | 4,294,967,295 |
| long long | 8 byte (64bit) | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| unsigned long long | 8 byte (64bit) | 0 | 18,446,744,073,709,551,615 |
| __int8 | 1 byte (8bit) | -128 | 127 |
| __int16 | 2 byte (16bit) | -32,768 | 32,767 |
| __int32 | 4 byte (32bit) | -2,147,483,648 | 2,147,483,647 |
| __int64 | 8 byte (64bit) | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| 실수형 | |||
| float | 4 byte (32bit) | -3.4E+38 | 3.4E+38 |
| double | 8 byte (64bit) | -1.79E+308 | 1.79E+308 |
| long double | 8 byte (64bit) | -1.79E+308 | 1.79E+308 |
위에서도 언급했지만, 주의해야 할 점은, 이러한 범위는 특정 시스템 또는 컴파일러에 따라 달라질 수 있습니다. 따라서 필요에 따라 특정 시스템에서 해당 데이터 타입의 크기나 범위를 확인하는 것이 좋습니다.
각주
논리형은 참(true) 또는 거짓(false)을 판단하는 자료형입니다. true와 false는 1bit면 충분하지만, 컴퓨터가 데이터를 처리할 때 최소 단위를 바이트(byte)를 사용하기 때문에, 1byte를 사용합니다. ↩