日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

malloc/free 和 new/delete的联系和区别

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 malloc/free 和 new/delete的联系和区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、malloc/free

?

1、? 函數原型:void* malloc(longNumBytes)?

該函數分配了NumBytes個字節,并返回了只想這塊空間的的指針。如果分配失敗則返回空。

函數原型:Void free(void *firstBytes)

該函數是將之前用malloc分配的內存空間釋放,還給操作系統。參數為只想那塊空間的首地址。

2、? 內存操作:

Malloc函數的參數是接受需要分配的內存字節,如果內存滿足請求量則返回:指向被分配內存起始位置地址的指針。

Free函數是釋放的是指針指向的內存空間,不是刪除指針本身(其中指針指向所釋放內存空間的首地址)。

3、? malloc如何申請內存空間?

malloc從堆中獲取空間,即函數返回的指針是指向堆中的一塊內存。操作系統中有一個記錄空閑內存地址的鏈表,當向操作系統申請時,就會遍歷鏈表,尋找一個空間大于所申請空間的堆節點,然后將該節點從鏈表中刪除,并分配給程序。

調用free函數時,他將用戶釋放的內存連接到空閑鏈表上,這是空閑手鏈表會被切成一塊塊片段,如過找不到適合的內存,,于是malloc請求延時,對片段進行整理,因此malloc函數在申請空間時一定要進行判斷

?

二、new/delete

?

new的時候發生兩件事情:

1)? 內存被分配(通過operatornew函數)

2)? 為被分配的內存調用一個或多個構造函數構建對象

Delete時:

1)? 為將要被釋放的內存調用一個或者多個析構函數

2)? 釋放內存(通過operatordelete函數)

注:調用new []開辟空間,必須調用delete[]釋放,反之new必須調用delete釋放。

?

三、malloc/free和new/delete的本質區別

?

1、? malloc返回值是void *,使用時要進行相對應的顯示轉換。New不用。

2、? malloc函數只關心內存的總字節數。New自動計算需要分配的內存(創建對象)。

3、? malloc/free 是庫函數,new delete是C++運算符。

1)? 運算符只能重載不能自定義。

2)? 任何函數都可以重載或者覆蓋,但通常不能改變運算符內部作用于內置類型的行為,比如不能operator + 讓2+3 產生6 的結果。

3)? New/delete能對對象進行構造和析構的調用進而對內存進行詳細工作。malloc/free不可以

4)? Malloc分配內存失敗返回NULL。new操作符分配內存失敗時默認的操作是拋出一個內部的異常,拋出之后,程序跳出new那一行代碼不再執行。

5)? Malloc分配的內存永遠都是進程的虛擬內存,malloc 是調用VirtualAlloc的。free也只是釋放虛擬內存。

6)? 因為C++經常調用c函數,而c程序只能調用malloc/free管理動態內存。

?

四、釋放的內存會被系統馬上回收嗎?

?

Free釋放內存會調用free函數時,他將用戶釋放的內存連接到空閑鏈表上,這是空閑手鏈表會被切成一塊塊片段,如過找不到適合的內存,,于是malloc請求延時,對片段進行整理,因此malloc函數在申請空間時一定要進行判斷。

?

?

五、使用范例

?

void *malloc(size_t size);

用malloc 申請一塊長度為length的整數類型的內存,程序如下:

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

我們應當把注意力集中在兩個要素上:“類型轉換”和“sizeof”。

1. malloc 返回值的類型是void *,所以在調用malloc 時要顯式地進行類型轉換,將void* 轉換成所需要的指針類型。

總結

以上是生活随笔為你收集整理的malloc/free 和 new/delete的联系和区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。