| 타입 | 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 |