32位環(huán)境涉及"ILP32"數(shù)據(jù)模型,是因?yàn)镃數(shù)據(jù)類型為32位的int郁岩、long婿奔、指針。
而64位環(huán)境使用不同的數(shù)據(jù)模型问慎,此時(shí)的long和指針已為64位萍摊,故稱作"LP64"數(shù)據(jù)模型。
現(xiàn)今所有64位的類Unix平臺(tái)均使用LP64數(shù)據(jù)模型蝴乔,而64位Windows使用LLP64數(shù)據(jù)模型,除了指針是64位驮樊,其他基本類型都沒(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中直接寫小數(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位的趁尼。