malloc、calloc、realloc和alloca各种的区别
生活随笔
收集整理的這篇文章主要介紹了
malloc、calloc、realloc和alloca各种的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
需要先包含頭文件
#include"malloc.h" malloc是標準的在堆中開辟新的空間 比如 char *pt=(char *)malloc(10*sizeof(char)); 需要free(p)才會釋放空間 calloc也是開辟空間,但是使用方式不一樣 比如 char *pt==(char *)calloc(100, sizeof(char)); 然后用calloc開辟的空間其內(nèi)容會自動初始化為空,等于把該棧中使用的空間清零。也就是賦值'\0'。 原本未使用的空間內(nèi)容都是'?'。 也需要用free來對該空間進行釋放 realloc對指針空間做重新定義,新的空間必須大于原來的空間。 比如 char *pt=(char *)malloc(10*sizeof(char)); realloc(pt, 1000*sizeof(char)); 如果小于原來的空間會造成一些異常。(編譯還是會通過) alloca是最特殊的開辟??臻g方法,優(yōu)點是當離開調(diào)用這個函數(shù)的時候,棧所分配的空間會自動釋放(也就是free)。 比如在一個函數(shù)中定義 void fun() { char *ptt=(char *)alloca(100*sizeof(char)); } 當跳出這個函數(shù)的時候,系統(tǒng)會自動free ptt這個空間。 但是他不是一個可移植的方法,如果處理器上不支持堆棧操作這個方法就不可用。(目前大部分處理器上都可以用。) 但是如果需要這個ptt在其他地方(這個函數(shù)外)還是需要使用,那么這個方法就不可取了。 這個要說明一下free的作用,free并不是把棧的地址的內(nèi)容給清零,而是告訴系統(tǒng)棧的某塊內(nèi)容可以被使用而已。如果夠不告訴系統(tǒng),則表明該區(qū)域一直在使用(實際上已經(jīng)不使用了)。那么系統(tǒng)在做下一次new或者malloc的操作的時候就會開辟另一個空間。但是棧空間是有限的,如果一直沒有free那么這個棧就會溢出。 內(nèi)存泄露的定義是:做malloc類似的開辟空間的操作之后,當不使用的時候不做釋放結(jié)果導致一直占據(jù)該內(nèi)存單。(用動態(tài)存儲分配函數(shù)動態(tài)開辟的空間,在使用完畢后未釋放,結(jié)果導致一直占據(jù)該內(nèi)存單元。直到程序結(jié)束。)轉(zhuǎn)載于:https://www.cnblogs.com/Ph-one/p/6812276.html
總結(jié)
以上是生活随笔為你收集整理的malloc、calloc、realloc和alloca各种的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java枚举的简单介绍
- 下一篇: Java BigDecimal Roun