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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ new[] delete[]底层分析

發(fā)布時間:2025/3/21 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ new[] delete[]底层分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先寫一個demo,里面有new[],delete[],使用C++11 MTd選項編譯:

#include <string> int main() {auto pS = new std::string[10];delete[] pS;return 0; }

new的大小為0x11c,十進制284,相當(dāng)與10*28 + 4。4個額外申請的長度就是保存數(shù)組大小用的。

auto pS = new std::string[10]; 009C970D push 11Ch 009C9712 call operator new[] (09C376Ch) 009C9717 add esp,4 009C971A mov dword ptr [ebp-0F8h],eax

在new返回的地址先寫入的數(shù)組的長度10,注意返回給用戶的地址是這個地址+4后的長度。

009C972E je main+9Ah (09C976Ah) 009C9730 mov eax,dword ptr [ebp-0F8h] 009C9736 mov dword ptr [eax],0Ah

數(shù)組對象開始調(diào)用構(gòu)造函數(shù)初始化:

009C973C push 9C3FB9h 009C9741 push 9C31DBh 009C9746 push 0Ah //對象的個數(shù) 009C9748 push 1Ch //對象的大小 009C974A mov ecx,dword ptr [ebp-0F8h] 009C9750 add ecx,4 009C9753 push ecx //將new返回的地址+4就是第一個對象的首地址 009C9754 call `eh vector constructor iterator' (09C3EECh) 009C9759 mov edx,dword ptr [ebp-0F8h] 009C975F add edx,4 009C9762 mov dword ptr [ebp-10Ch],edx//注意這里返回的地址是+4的,這是用戶拿到的地址。復(fù)制流是這樣的[ebp-10ch]->[ebp-104h]->ecx->pS 009C9768 jmp main+0A4h (09C9774h) 009C976A mov dword ptr [ebp-10Ch],0 009C9774 mov eax,dword ptr [ebp-10Ch] 009C977A mov dword ptr [ebp-104h],eax 009C9780 mov dword ptr [ebp-4],0FFFFFFFFh 009C9787 mov ecx,dword ptr [ebp-104h] 009C978D mov dword ptr [pS],ecx

所以我們調(diào)用new[]多個對象的時候,返回地址-4上保存著這個對象數(shù)組的大小。
接著我們看delete[]的時候是怎么用的:上來就是空指針檢查,即使我們C++代碼里面沒有寫。

delete[] pS; 009C9790 mov eax,dword ptr [pS] 009C9793 mov dword ptr [ebp-0E0h],eax 009C9799 mov ecx,dword ptr [ebp-0E0h] 009C979F mov dword ptr [ebp-0ECh],ecx 009C97A5 cmp dword ptr [ebp-0ECh],0 //檢查pS是否為NULL 009C97AC je main+0F3h (09C97C3h) 009C97AE push 3 delete[] pS; 009C97B0 mov ecx,dword ptr [ebp-0ECh] 009C97B6 call std::basic_string<char,std::char_traits<char>,std::allocator<char> >::`vector deleting destructor' (09C4216h)

跟入vector deleting destructor函數(shù)看看:先[pS-4]取數(shù)組的的長度,調(diào)用析構(gòu)函數(shù),然后delete釋放內(nèi)存。

009C78DB push 9C3FB9h 009C78E0 mov eax,dword ptr [this] //取pS的值 009C78E3 mov ecx,dword ptr [eax-4] //取對象數(shù)組的長度 009C78E6 push ecx //string對象的個數(shù)10 009C78E7 push 1Ch //strig對象的大小 009C78E9 mov edx,dword ptr [this] 009C78EC push edx 009C78ED call `eh vector destructor iterator//調(diào)用string析構(gòu)函數(shù) 009C78F2 mov eax,dword ptr [ebp+8] 009C78F5 and eax,1 009C78F8 je std::basic_string<char,std::char_traits<char>,std::allocator<char> >::`vector deleting destructor'+59h (09C7909h) 009C78FA mov eax,dword ptr [this] 009C78FD sub eax,4 //pS-4才是申請堆block的首地址,然后delete釋放。 009C7900 push eax 009C7901 call operator delete[] (09C3136h) 009C7906 add esp,4

總結(jié):delete[]參數(shù)不用輸入數(shù)組的長度,是CRT實現(xiàn)new的時候在堆userdata首地址放上了數(shù)組長度,new返回的地址是申請到地址+4的值。然后delete[]釋放的時候,用傳入地址-4拿數(shù)組長度,實現(xiàn)數(shù)組釋放。

總結(jié)

以上是生活随笔為你收集整理的c++ new[] delete[]底层分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久久久久影视 | 中文字幕精品在线视频 | 伊人久久色 | 亚洲专区在线视频 | 激情偷乱人成视频在线观看 | 国产三级在线观看视频 | 一个色在线视频 | 精品国产18久久久久久二百 | 欧美三级韩国三级日本三斤 | 国产人妖一区二区三区 | 欧美日韩视频在线播放 | 第一av| 亚洲成a人片77777精品 | 91n视频 | 国产精品2| 男女作爱免费网站 | 91性高潮久久久久久久 | 看国产毛片| 亚州一级| 久久精品国产清自在天天线 | 蜜桃视频中文字幕 | 菠萝菠萝蜜网站 | 亚洲乱码国产乱码精品精剪 | 蜜桃视频免费网站 | 国产精品19p | 国产精品区二区三区日本 | 成年人午夜网站 | 亚洲午夜伦理 | 国产区一区二区三区 | 中文字幕人妻精品一区 | 久久伊人五月天 | 潘金莲一级淫片免费放动漫 | 少妇毛片一区二区三区粉嫩av | 国产精品精 | 污到下面流水的视频 | 国产综合视频 | 打白嫩屁屁网站视频短裙 | 黄色网在线免费观看 | www.国产精品.com | 在线观看精品国产 | 99久久久国产精品无码网爆 | 波多野结衣一区二区三区中文字幕 | 熊猫电影yy8y全部免费观看 | 欧美激情va永久在线播放 | 青娱乐伊人 | 国产男女猛烈无遮挡免费视频 | 又黄又爽的视频在线观看 | 国产xxxx在线 | 午夜在线免费观看视频 | 日韩在线视频免费观看 | 日韩日b| 国精产品一品二品国精品69xx | 刘亦菲毛片一区二区三区 | 久久精品国产亚洲AV成人雅虎 | 亚洲精品v天堂中文字幕 | 国产特黄级aaaaa片免 | 欧美韩日一区二区 | 欧美日韩在线免费 | 欧美日韩一区二区三区在线视频 | 欧美日韩少妇 | 欧美伦理片网站 | 一区二区三区免费毛片 | 99国产精品一区二区 | 亚洲精品字幕在线 | 神马久久久久久久久 | 天天干国产 | 一区二区三区四区视频 | 黄色欧美网站 | 蜜桃免费在线视频 | 国产动漫av| 国产成人综合在线观看 | 亚洲av人无码激艳猛片服务器 | 黑名单上的人全集免费观看 | 一区二区三区网 | 日本成人动漫在线观看 | 亚洲中文字幕在线观看 | 在线视频1卡二卡三卡 | 欧美午夜一区二区 | 日本精品在线 | 久久综合一区二区三区 | 老牛影视少妇在线观看 | 手机午夜视频 | 粗大挺进潘金莲身体在线播放 | 爱就操 | 岛国av大片 | 一区二区三区欧美精品 | 欧美日韩综合 | 天天干狠狠插 | 亚洲精品2| 婷婷国产视频 | 国产另类自拍 | xvideos永久免费入口 | 中国国产精品 | 精品一区二区三区在线免费观看 | 男女免费毛片 | 在线青草| 少妇久久久久久久久久 | 国产永久免费观看 | 国产成人无码精品久久久电影 |