- 這三個(gè)函數(shù)的作用都是用來分配一塊連續(xù)的內(nèi)存空間以供使用烈菌,使用過一定要調(diào)用free函數(shù)釋放內(nèi)存,否則會(huì)造成內(nèi)存泄漏花履。
一芽世、 malloc
1.函數(shù)原型
void *malloc(size_t size);
2.功能
??malloc()在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(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ù)個(gè)數(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()是給一個(gè)已經(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)存被分配過狡门,可能會(huì)遺留臟數(shù)據(jù)陷寝。
- calloc會(huì)在分配內(nèi)存的時(shí)候?qū)?nèi)存初始化清零。
- realloc是對給定指針指向的內(nèi)存空間進(jìn)行擴(kuò)大縮小其馏,當(dāng)擴(kuò)大一塊內(nèi)存空間時(shí)凤跑,realloc試圖直接從現(xiàn)存的數(shù)據(jù)后面的那些字節(jié)中獲得附加的字節(jié)。如果后面的字節(jié)不夠叛复,那么就使用堆上第一個(gè)足夠滿足要求的自由空間塊饶火,現(xiàn)存的數(shù)據(jù)然后就被拷貝到新的位置上鹏控,而老塊則放回堆空間,所以相關(guān)數(shù)據(jù)有被移動(dòng)位置的可能肤寝〉狈縮小內(nèi)存時(shí),超出內(nèi)存的數(shù)據(jù)將被丟棄鲤看。