首先須要瞭解的基礎知識,也是很是重要的內容,就是C所定義的數據類型了。ide
一般計算機存儲的最小單位是字節(Byte),一個字節是8個bit。數據類型作佔用的字節數遵循ILP32或LP64規範,以下表所示。x86/Linux/gcc,遵循ILP32,而且char
是有符號的。spa
類型 | ILP32(位數) | LP64(位數) |
char | 8 | 8 |
short | 16 | 16 |
int | 32 | 32 |
long | 32 | 64 |
long long | 64 | 64 |
指針 | 32 | 64 |
當咱們使用char *p=(char *)malloc(sizeof(char))開闢內存空間時,咱們就得到了1個字節的存儲空間,指針p指向該塊內存首地址。須要注意的是內存中的地址最小單位就是字節,而不是位,因此這個在這個特例中咱們不能移動p,好比企圖向p+1的地址空間寫數據,可能引發崩潰。 查看了malloc後發現其實malloc分配的地址空間一般比咱們要求的要大一些,因此可能p+1的位置仍是能寫數據,我嘗試到p+4後調用free(p)會崩潰。操作系統
一樣,int *p=(int *)malloc(4*sizeof(int)),即申請了4*4=16個字節,每一個×××佔用4字節,p就能夠保存4個×××數據,能夠使用下標或者指針移動來訪問這4個格子了。指針
一樣的咱們能夠申請更大的內存,須要注意的就是讀寫數據千萬在申請的範圍內了,用完後調用free()將內存還給操做系統。code