資料:Python中的變量與內(nèi)存理解
C語言中的基本數(shù)據(jù)類型:

在32位、64位系統(tǒng)當(dāng)中,唯一改變的是指針的長度;在32位系統(tǒng)當(dāng)中是4個字節(jié)、64位則是8個字節(jié)。所謂的32位、64位,這個指的是寄存器的位寬。
在32位的操作系統(tǒng)下每種類型所占內(nèi)存:
>int:4字節(jié) ? ? ? ? >unsigned ?int:4字節(jié)
>short:2字節(jié) ? ? ? ? >unsigned short:2字節(jié)
>long:4字節(jié) ? ? ? >unsigned long:4字節(jié)
>long ?long:8字節(jié) ? ? ? ? ?>unsigned ?long ?long :8字節(jié)
>char :1字節(jié)
>float:4字節(jié)
>double:8字節(jié) ? ? ? ?>unsigned double:4字節(jié)
>long double:有的是8字節(jié),有的是10字節(jié),有的是12字節(jié)或16字節(jié)。規(guī)定long double的精度不少于double的精度,就像int和long int一樣。關(guān)于具體的編譯器的情況, 可以打印 sizeof(long double)得知。
>string:32字節(jié)
>所有類型的指針都是 4字節(jié)
>共有體(聯(lián)合體)union:取其中占有字節(jié)數(shù)最大的數(shù)據(jù)類型所占有的字節(jié)數(shù)。
>函數(shù):除了void型。其他都函數(shù)占有的字節(jié)數(shù)等于函數(shù)的返回類型所占有的字節(jié)數(shù)。與函數(shù)體內(nèi)部無關(guān)。
如:float ?fun(){ return 2;}
sizeof(fun())= 8
>結(jié)構(gòu)體、類:內(nèi)部各數(shù)據(jù)類型占用之和,注意邊界對齊。如:
?struct fun1{
int a;???//4
double b;??//8
char c;?????//1
};
sizeof(fun1)=24
truct fun2{
int a;???//4
char c;?????//1
};
sizeof(fun2)=8
特殊:
structfun3{
string a;???//32
char b,c,d;?????//3
};
sizeof(fun3)=36
整型的每一種都有無符號(unsigned)和有符號(signed)兩種類型,在默認(rèn)情況下聲明的整型變量都是有符號的類型(char有點(diǎn)特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。無符號版本和有符號版本的區(qū)別就是有符號類型需要使用一個bit來表示數(shù)字的正負(fù),比如16位系統(tǒng)中一個int能存儲的數(shù)據(jù)的范圍為–32768 ~ 32767(16位2進(jìn)制的最高位作為符號位‘1’為負(fù)‘0’為正),而unsigned能存儲的數(shù)據(jù)范圍則是0~65535(這個最高位不用做符號位,所以是2的16次方,一共65536)。由于在計(jì)算機(jī)中,整數(shù)是以補(bǔ)碼形式存放的。根據(jù)最高位的不同,如果是1,有符號數(shù)的話就是負(fù)數(shù);如果是無符號數(shù),則都解釋為正數(shù)。同時在相同位數(shù)的情況下,所能表達(dá)的整數(shù)范圍變大。另外,unsigned若省略后一個關(guān)鍵字,大多數(shù)編譯器都會認(rèn)為是unsigned int。
64位系統(tǒng)下的long類型和pointer(指針)類型長度為64位
32位和64位的區(qū)別還涉及了內(nèi)存的尋址方面,32位系統(tǒng)的最大尋址空間是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系統(tǒng)的最大尋址空間的尋址空間則達(dá)到了2的64次方= 4294967296(bit)的32次方=數(shù)值大于1億GB。換而言之,就是說32位系統(tǒng)的處理器最大只支持到4G內(nèi)存,而64位系統(tǒng)最大支持的內(nèi)存高 達(dá)億位數(shù)。