공부

데이터 모델별 비트 차이

CodingNabi 2026. 7. 4. 21:34

 

타입 LP32 ILP32 LLP64 LP64 ILP64
char 8(1Byte) 8 (1Byte) 8 (1Byte) 8 (1Byte) 8 (1Byte)
short 16 (2Byte) 16 (2Byte) 16 (2Byte) 16 (2Byte) 16 (2Byte)
int 16 (2Byte) 32 (4Byte) 32 (4Byte) 32 (4Byte) 64 (8Byte)
long 32 (4Byte) 32 (4Byte) 32 (4Byte) 64 (8Byte) 64 (8Byte)
long long - 64 (8Byte) 64 (8Byte) 64 (8Byte) 64 (8Byte)
pointer 32 (4Byte) 32 (4Byte) 64 (8Byte) 64 (8Byte) 64 (8Byte)

(단위: bit)

정리하면:

  • LP32: Win16, 옛날 Mac. int가 16비트라 지금 기준으론 좀 낯설게 느껴짐.
  • ILP32: 32비트 시절 표준 (Win32, 32비트 Linux 등). sizeof(int) == sizeof(long) == sizeof(void*) == 4.
  • LLP64: 지금 64비트 Windows. int, long은 그대로 32비트 유지, pointer랑 long long만 64비트로 확장. 마소가 이걸 고른 이유는 기존 32비트 코드/구조체 호환성을 최대한 깨지 않으려는 목적.
  • LP64: 지금 64비트 Linux/macOS/Unix 계열. long이랑 pointer가 64비트. int는 32비트 유지.
  • ILP64: int, long, pointer 다 64비트로 맞춘 모델. Cray 등 극히 일부만 채택. 실질적으로 거의 안 씀 — __int32 같은 별도 타입 도입이 필요해서 오히려 이식성이 떨어짐.

float/double

 

  • IEEE 754 표준으로 크기와 비트 배치(부호/지수/가수)가 못 박혀 있음. float는 32비트, double은 64비트로 사실상 모든 주류 플랫폼(x86, x86-64, ARM 등)에서 고정.
  • 32비트 시스템이든 64비트 시스템이든, ILP32든 LP64든 상관없이 float=32비트, double=64비트로 변하지 않음.

 

'공부' 카테고리의 다른 글

우리는 왜 UTF-8을 써야 하는가  (0) 2026.07.07
버블정렬  (0) 2026.07.06
C/C++ 연산자 우선순위  (0) 2026.07.05
이스케이프 시퀀스 / C 표준 입출력  (0) 2026.07.05
메모리 구조(프로세스 주소공간 전체 구조)  (0) 2026.07.04