c與c++分別是怎樣動態分配和釋放內存的,有什麼區別

C語言

c語言提供內存動態分配的函數有:malloc、calloc、realloc,在使用這些函數時必須包含其頭文件,分別爲:<malloc.h>、<stdlib.h>、<alloc.h>函數

  1. malloc 函數: void *malloc(unsigned int size)

在內存的動態分配區域中分配一個長度爲size的連續空間,若是分配成功,則返回所分配內存空間的首地址,不然返回NULL,申請的內存不會進行初始化。指針

  1. calloc 函數: void *calloc(unsigned int num, unsigned int size)

按照所給的數據個數和數據類型所佔字節數,分配一個 num * size 連續的空間。code

calloc申請內存空間後,會自動初始化內存空間爲 0,可是malloc不會進行初始化,其內存空間存儲的是一些隨機數據。對象

  1. realloc 函數: void *realloc(void *ptr, unsigned int size)

動態分配一個長度爲size的內存空間,並把內存空間的首地址賦值給ptr,把ptr內存空間調整爲size。內存

申請的內存空間不會進行初始化。原型

釋放的函數爲free函數: free函數原型爲:void free(void *ptr)編譯器

做用:釋放由上面3種函數所申請的內存空間。編譯

參數:ptr:指向須要釋放的內存空間的首地址。變量

C++語言

在C++中,內存分紅5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。隨機數

申請和釋放堆中分配的存儲空間,分別使用new 和 delete 的兩個運算符來完成:

指針變量名 = new 類型名(初始化式);

delete 指針名;

例如:

int *pi = new int(0)

總結

malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們均可以用於申請動態內存和釋放內存。

對於非內部數據類型對象而言,光用malloc/free沒法知足動態對象的要求。對象在建立的同時要自動執行構造函數,對象在消亡以前要自動執行析構函數。因爲malloc/free是庫函數而不是運算符,不在編譯器控制權限以內,不可以把執行構造函數和析構函數的任務強加於malloc/free.

相關文章
相關標籤/搜索