85.3 데이터 모델
C 언어의 정수 자료형은 운영체제, CPU(플랫폼)에 따라 같은 short, int, long이라 하더라도 크기가 달라집니다. 다음은 각 데이터 모델별 정수 자료형의 크기(비트)입니다. S는 short, I는 int, L은 long, LL은 long long, P는 포인터를 뜻합니다.
데이터 모델 | short | int | long | long long | 포인터 | CPU 및 운영체제 |
---|---|---|---|---|---|---|
IP16L32(near) | 16 | 16 | 32 | 16 | x86(16비트): MS-DOS | |
I16LP32(far) | 16 | 16 | 32 | 32 | x86(16비트): MS-DOS | |
ILP32 | 16 | 32 | 32 | 64 | 32 | x86(32비트): 유닉스 및 리눅스, 솔라리스, BSD, OS X, Windows |
LLP64/IL32P64 | 16 | 32 | 32 | 64 | 64 | x86-64(64비트): Windows |
LP64/I32LP64 | 16 | 32 | 64 | 64 | 64 | x86-64(64비트): 유닉스 및 리눅스, 솔라리스, BSD, OS X |
ILP64 | 16 | 64 | 64 | 64 | 64 | |
SILP64 | 64 | 64 | 64 | 64 | 64 |
32비트 Windows, 리눅스, OS X에서 사용하는 ILP32는 int, long, pointer의 크기가 32비트라는 뜻입니다.
64비트 Windows에서 사용하는 LLP64/IL32P64에서 LLP64는 long long과 pointer의 크기가 64비트라는 뜻이고, IL32P64는 int와 long의 크기가 32비트, pointer의 크기가 64비트라는 뜻입니다.
64비트 리눅스, OS X에서 사용하는 LP64/I32LP64에서 LP64는 long과 pointer의 크기가 64비트라는 뜻이고, I32LP64는 int의 크기가 32비트, long과 pointer의 크기가 64비트라는 뜻입니다.