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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++堆内存默认大小_C++|array new 和 array delete的堆内存细节

發布時間:2024/10/5 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++堆内存默认大小_C++|array new 和 array delete的堆内存细节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在C中, 堆內存的申請與釋放通過malloc()和free()來進行,而對于C++,其運算符函數new、delete不但封裝了malloc()和free(),還增加了一些額外的操作,來得更安全和便捷。

C++的new、delete與C的maoolc()、free()在array操作時有所不同,array new需與array delete匹配,也就是一個new []必須匹配delete []。

delete→釋放整塊內存,即使是new的動態對象數組。

delete[]→① 釋放整塊內存,即使是new的動態對象數組。② 釋放每個對象中指針成員指向的堆內存。

所以有new指針成員指向堆內存的類對象數組,不僅需要big three,還需要delete[]。而對于沒有指針成員指向堆內存的類對象,則可以使用默認的big three,即使new一個動態對象數組,也可以將delete[]寫成delete,但為了統一規范即避免意外考慮,對于new出的動態對象數組,統一配對delete[]為最佳考慮。

由由圖可知,申請n個字節的內存,給出的內存還有額外部分,在這個內存塊的頭尾位置用一個字節來存儲這個內存塊的大小,如果申請動態數組,還有一個字節存儲某種數據類型的數量(數組元素數量)。此外,如果是Debug模式,還包含了32字節用來構建Debugger Header,用作調試信息。當然,還會考慮內存對齊,通過犧牲空間來獲取時間,以有更快的字節訪問速度。

delete[]:

上述封裝了指針的類,當new這樣的類的對象數組時,對于C語言來說,相當于是要構建一個二維動態數組,具體細節請見:C|三種方法創建二維動態數組,通常需要用一個循環來free()多個指向堆內存的指針。而對于C++的delete,則只需增加一個[]即可告知編譯器,這里釋放的是一個動態數組,需要釋放掉每個指針指向的堆內存塊。

ref

https://www.bilibili.com/video/BV1aW411H7Xa?p=8

-End-

總結

以上是生活随笔為你收集整理的c++堆内存默认大小_C++|array new 和 array delete的堆内存细节的全部內容,希望文章能夠幫你解決所遇到的問題。

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