天天看點

malloc calloc new 差別

1、函數的原型:

void *malloc(sizt_t size);

void *calloc(size_t numElements,size_t sizeOfElement);

2、函數的聲明與頭檔案

#include <malloc.h>

void *malloc(int size);      

3、函數的嗲用:

//功能:傳回類型為 int* 類型(整數型指針),配置設定大小為 sizeof(int) * 10

int *p;

p=(int *)malloc(sizeof(int)*10);

p=(int *)calloc(10,size(int));

p=new int[10]; 

4、差別:

malloc配置設定的動态記憶體,不會初始化配置設定的記憶體空間,使用malloc需要初始化記憶體空間。否則,當配置設定的記憶體空間有曆史值時,程式可能會出現問題。

colloc配置設定的動态記憶體,會初始化記憶體空間,如為整數型和字元型的元素配置設定記憶體将初始化為0,如果為指針類型的元素配置設定記憶體則初始化空指針。

5、補充:
一次malloc的記憶體虛拟位址是連續的,實體位址不連續,連續多次malloc的記憶體之間不一定連續。
ew是在堆上配置設定記憶體空間的,而作業系統用雙向連結清單來維護堆空間,是以你一次new操作配置設定到的一塊記憶體是連續的,而兩次new操作配置設定到的兩塊記憶體可能就不在一起了。
      
下一篇: kmeans原理

繼續閱讀