85.3 데이터 모델

C 언어의 정수 자료형은 운영체제, CPU(플랫폼)에 따라 같은 short, int, long이라 하더라도 크기가 달라집니다. 다음은 각 데이터 모델별 정수 자료형의 크기(비트)입니다. S는 short, I는 int, L은 long, LL은 long long, P는 포인터를 뜻합니다.

표 85‑3 데이터 모델
데이터 모델 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 longpointer의 크기가 64비트라는 뜻이고, IL32P64는 intlong의 크기가 32비트, pointer의 크기가 64비트라는 뜻입니다.

64비트 리눅스, OS X에서 사용하는 LP64/I32LP64에서 LP64는 longpointer의 크기가 64비트라는 뜻이고, I32LP64는 int의 크기가 32비트, longpointer의 크기가 64비트라는 뜻입니다.