malloc与new的区别
生活随笔
收集整理的這篇文章主要介紹了
malloc与new的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. malloc()函數
1.1 malloc的全稱是memory allocation,中文叫動態內存分配。
原型:extern void *malloc(unsigned int num_bytes);
說明:分配長度為num_bytes字節的內存塊。如果分配成功則返回指向被分配內存的指針,分配失敗返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。
1.2 void *malloc(int size);
說明:malloc 向系統申請分配指定size個字節的內存空間,返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規定,void* 類型可以強制轉換為任何其它類型的指針。
備注:void* 表示未確定類型的指針,更明確的說是指申請內存空間時還不知道用戶是用這段空間來存儲什么類型的數據(比如是char還是int或者...)
1.3 free
void free(void *FirstByte): 該函數是將之前用malloc分配的空間還給程序或者是操作系統,也就是釋放了這塊內存,讓它重新得到自由。
?
?
2. malloc和new的區別
2.1 new 返回指定類型的指針,并且可以自動計算所需要大小。
比如:
1) int *p;
p = new int; //返回類型為int* 類型(整數型指針),分配大小為sizeof(int);
或:
int* parr;
parr = new int[100]; //返回類型為 int* 類型(整數型指針),分配大小為 sizeof(int) * 100;
2) 而 malloc 則必須要由我們計算字節數,并且在返回后強行轉換為實際類型的指針。
int* p;
p = (int *)malloc (sizeof(int)*128);//分配128個(可根據實際需要替換該數值)整型存儲單元,并將這128個連續的整型存儲單元的首地址存儲到指針變量p中?
double*pd=(double *) malloc (sizeof(double)*12);//分配12個double型存儲單元,并將首地址存儲到指針變量pd中
?
舉個例子:
Malloc版本:
char*str1,*str2; str1=(char*)malloc(128); str2=(char *)malloc(128);// 分配128個字符存儲單 //元,并將這128個連續的字符存儲單元的首地址存儲到指針變量str1中 free(str1); free(str2);
new ,delete版本:
char *str1, *str2; str1= new char[128]; str2 = newchar[128]; delete[]str1; delete[] str2;2.2 malloc 只管分配內存,并不能對所得的內存進行初始化,所以得到的一片新內存中,其值將是隨機的。
除了分配及最后釋放的方法不一樣以外,通過malloc或new得到指針,在其它操作上保持一致。
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的malloc与new的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对称密码获取(OJ)
- 下一篇: 转载:malloc()与new()的区别