- 這三個函數(shù)的作用都是用來分配一塊連續(xù)的內(nèi)存空間以供使用,使用過一定要調(diào)用free函數(shù)釋放內(nèi)存,否則會造成內(nèi)存泄漏。
一、 malloc
1.函數(shù)原型
void *malloc(size_t size);
2.功能
??malloc()在內(nèi)存的動態(tài)存儲區(qū)中分配一塊長度為size字節(jié)的連續(xù)區(qū)域。參數(shù)size為需要的內(nèi)存空間的長度,返回該區(qū)域的地址。
3.使用
int num = 20;
Class *allClass = NULL;
allClass = (__unsafe_unretained Class *)malloc(sizeof(Class) * num);
free(allClass);
二、calloc
1.函數(shù)原型
void *calloc(size_t nmemb, size_t size);
2.功能
??calloc()與malloc()相似,參數(shù)size為申請地址的單位元素長度,nmemb為參數(shù)個數(shù)。
3.使用
int num = 20;
Class *allClass = NULL;
allClass = (__unsafe_unretained Class *)calloc(num, sizeof(Class));
free(allClass);
三、realloc
1.函數(shù)原型
void *realloc(void *ptr, size_t size);
2.功能
??realloc()是給一個已經(jīng)分配了地址的指針重新分配空間,參數(shù)ptr為原有的空間地址,newsize是重新申請的地址空間。
3.使用
int num = 20;
Class *allClass = NULL;
allClass = (__unsafe_unretained Class *)realloc(allClass, sizeof(Class) * num);
free(allClass);
四、區(qū)別
- malloc就是簡單的分配內(nèi)存空間,如果當(dāng)初這塊內(nèi)存被分配過,可能會遺留臟數(shù)據(jù)。
- calloc會在分配內(nèi)存的時候?qū)?nèi)存初始化清零。
- realloc是對給定指針指向的內(nèi)存空間進(jìn)行擴(kuò)大縮小,當(dāng)擴(kuò)大一塊內(nèi)存空間時,realloc試圖直接從現(xiàn)存的數(shù)據(jù)后面的那些字節(jié)中獲得附加的字節(jié)。如果后面的字節(jié)不夠,那么就使用堆上第一個足夠滿足要求的自由空間塊,現(xiàn)存的數(shù)據(jù)然后就被拷貝到新的位置上,而老塊則放回堆空間,所以相關(guān)數(shù)據(jù)有被移動位置的可能??s小內(nèi)存時,超出內(nèi)存的數(shù)據(jù)將被丟棄。