32位環(huán)境涉及"ILP32"數(shù)據(jù)模型,是因?yàn)镃數(shù)據(jù)類(lèi)型為32位的int、long、指針。
而64位環(huán)境使用不同的數(shù)據(jù)模型,此時(shí)的long和指針已為64位,故稱(chēng)作"LP64"數(shù)據(jù)模型。
現(xiàn)今所有64位的類(lèi)Unix平臺(tái)均使用LP64數(shù)據(jù)模型,而64位Windows使用LLP64數(shù)據(jù)模型,除了指針是64位,其他基本類(lèi)型都沒(méi)有變。
Data Type???? ILP32????? ILP64?LP64????? LLP64
char???????? ??? ?8???????????? 8????????????8???????? ?? 8
short????????????16?????????? 16?16??????????16
int??????? ??????? 32?????????? 64?32?????? ?? 32
long???????????? 32?????????? 64????????64????????? 32
long long???? ?64???????????64?64????????? 64
pointer????? ?? 32?????????? 64?64?????? ?? 64
在網(wǎng)上查資料,還看到一個(gè)LP32(long point 64)模型,就是int是16位的。
這個(gè)從來(lái)沒(méi)有用到過(guò)。
絕大部分64位的Unix,linux都是使用的LP64模型;
64位的Windows使用的是LLP64(long long and point 64)模型。
另外,在網(wǎng)上看到一個(gè)資料:
float??? 都是4字節(jié);
double??? 都是8字節(jié);(C中直接寫(xiě)小數(shù),默認(rèn)是double型)
TYPE?????????????? LP32? ILP32? LP64? ILP64 ?LLP64
CHAR??????????????? 8??????? ?8????????? 8?????????8???????? 8
SHORT???????????? 16?????? 16????????16?????? 16?????? 16
INT??????????????????16???????32????????32??????? 64????? 32
LONG?????????????? 32???????32??????? 64???????64?????? 32
LONG LONG???? 64???????64????????64???????64???????64
POINTER????????? 32???????32??????? 64?????? 64???????64?
在這張表中,LP64,ILP64,LLP64是64位平臺(tái)上的字長(zhǎng)模型,ILP32和LP32是32位平臺(tái)上的字長(zhǎng)模型。
LP64意思是long和pointer是64位,ILP64指int,long,pointer是64位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。