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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

new/delete与malloc/free

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

C語言中使用malloc/calloc/realloc用來在堆上分配空間,free將申請的空間釋放掉。

malloc:

原型:extern void *malloc(unsigned int num_bytes)。

功能:分配長度為num_bytes字節的內存塊。

1 int *p=(int*)malloc(sizeof(int)); 2 free(p); 3 p=NULL

calloc:

原型:extern void *calloc(int num_elems, int elem_size);

用法:#include <alloc.h>

功能:為具有num_elems個長度為elem_size元素的數組分配內存

1 int *p=(int*)calloc(100,sizeof(int)); 2 free(p); 3 p=NULL;

realloc:

原型:extern void *realloc(void *mem_address, unsigned int newsize);

用法:#include <alloc.h>

功能:改變mem_address所指內存區域的大小為newsize長度。

?

1 int *p=(int*)malloc(sizeof(int)); 2 realloc(p,10*sizeof(int)); 3 free(p);

?

問題:為什么分配了空間之后,必須要用戶手動去free掉呢?

答案:因為malloc/calloc/realloc都是在堆上分配的,堆上分配的空間必須由用戶自己來管理,如果不釋放,就會造成內存泄漏。而棧上分配的空間是由編譯器來管理的,具有函數作用域,出了函數作用域后系統會自動回收,不由用戶管理,所以不用用戶顯式釋放空間。

?

C++中是通過new和delete操作符進行動態內存管理的。因為new和delete是操作符,所以可以重載。

用一張圖說明new和delete的含義:

new和delete以及malloc和free一樣,要成對使用。

這是string *s = new string("a value"); 這句表達式內部的實現:

?

可以得出

(初始化一個對象時)new內部的調用順序:new —— operator new —— malloc —— 構造函數 (先申請空間,再調用構造函數)

(初始化若干個對象時)new內部的調用順序:new —— operator new [ ] —— operator new —— malloc —— 構造函數

(delete單個對象時)delete對象時,調用順序為:delete —— 析構函數 —— operator delete —— free (先調用析構函數,再釋放空間)

(delete多個對象時)delete對象時,調用順序為:delete [ ] —— 析構函數 —— operator delete —— free

?

問題:new和delete與malloc和free都是存在堆上的,二者有什么差別?

答案

1. 它們都是動態管理內存的入口。

2. malloc/free是C/C++標準庫的函數,new/delete是C++操作符。

3. malloc/free只是動態分配內存空間/釋放空間。而new/delete除了分配空間還會調用構造析構函數進行初始化與清理(清理成員)。

4. malloc/free需要手動計算類型大小且返回值為void*,new/delete可自己計算類型的大小對應類型的指針。

5.new/delete的底層調用了malloc/free。

6.malloc/free申請空間后得判空,new/delete則不需要。

7.new直接跟類型,malloc跟字節數個數。

轉載于:https://www.cnblogs.com/WindSun/p/10419299.html

總結

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

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