c語言提供內存動態分配的函數有:malloc、calloc、realloc,在使用這些函數時必須包含其頭文件,分別爲:<malloc.h>、<stdlib.h>、<alloc.h>
函數
void *malloc(unsigned int size)
在內存的動態分配區域中分配一個長度爲size的連續空間,若是分配成功,則返回所分配內存空間的首地址,不然返回NULL,申請的內存不會進行初始化。指針
void *calloc(unsigned int num, unsigned int size)
按照所給的數據個數和數據類型所佔字節數,分配一個 num * size 連續的空間。code
calloc申請內存空間後,會自動初始化內存空間爲 0,可是malloc不會進行初始化,其內存空間存儲的是一些隨機數據。對象
void *realloc(void *ptr, unsigned int size)
動態分配一個長度爲size的內存空間,並把內存空間的首地址賦值給ptr,把ptr內存空間調整爲size。內存
申請的內存空間不會進行初始化。原型
釋放的函數爲free函數: free函數原型爲:void free(void *ptr)
編譯器
做用:釋放由上面3種函數所申請的內存空間。編譯
參數:ptr:指向須要釋放的內存空間的首地址。變量
在C++中,內存分紅5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。隨機數
申請和釋放堆中分配的存儲空間,分別使用new 和 delete 的兩個運算符來完成:
指針變量名 = new 類型名(初始化式);
delete 指針名;
例如:
int *pi = new int(0)
malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們均可以用於申請動態內存和釋放內存。
對於非內部數據類型對象而言,光用malloc/free沒法知足動態對象的要求。對象在建立的同時要自動執行構造函數,對象在消亡以前要自動執行析構函數。因爲malloc/free是庫函數而不是運算符,不在編譯器控制權限以內,不可以把執行構造函數和析構函數的任務強加於malloc/free.