malloc內存分配筆記

首先需要了解的基礎知識,也是非常重要的內容,就是C所定義的數據類型了。

通常計算機存儲的最小單位是字節(Byte),一個字節是8個bit。數據類型做佔用的字節數遵循ILP32或LP64規範,如下表所示。x86/Linux/gcc,遵循ILP32,並且char是有符號的。

類型 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()將內存還給操作系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章