亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C和C++中的動態內存管理

2019-11-06 06:23:02
字體:
來源:轉載
供稿:網友

C中的動態內存管理

1、C語言中使用malloc/calloc/realloc/free進行動態內存管理,malloc/calloc/realloc用來在堆上開辟空間,free將申請的空間釋放掉。 1)malloc 原型:void * malloc(size_t size); 該函數將在堆上分配一個size byte大小的內存。它分配的單原完全按字節大小計算,因此如此分配N個單原的student_t,那么要這樣實現:(stdent_t )malloc(N sizeof (student_t)); (可用memset初始化) 2)calloc 原型:void* calloc(size_t size, int count); 該函數解決了上面的函數的不足,它將分配count個size大小的單原,因此在便用此函數的時候就會很方便,比如對上面的例子就可以:(student_t *)calloc(sizeof(t_student), N)就可以了。這樣使用就會很清晰的知道分配的內存是一種什么樣的邏輯方式。(會將申請的內存空間初始化) 3)realloc 改變原有內存空間的大小,若不能改變,則會開辟一段新的內存,將原有內存的內容拷貝過去,不會對新開辟的空間進行初始化。 4)_alloc 使用_alloc在棧上動態開辟內存,棧上空間具有函數作用域,在函數結束后系統自動回收,不用用戶管理。

注意:堆上的內存需要用戶自己管理,也就是說用戶動態malloc/calloc/realloc的空間,必須自己free掉,否則會造成內存泄漏。 2、常見的內存泄漏

void MemoryLeaks(){ //1.內存申了忘記釋放 int *pTest = (int *)malloc(10*sizeof(int)); assert(NULL != pTest); Do(); //2.程序邏輯不清,以為釋放了,實際內存泄漏 int *pTest1 = (int *)malloc(10*sizeof(int)); int *pTest2 = (int *)malloc(10*sizeof(int)); Do(); pTest1 = pTesr2; free(pTest1); free(pTest2); //3.程序誤操作,將堆破壞 char *pTest3 = (char *)malloc(5); strcpy(pTest3,"Memory Leaks!"); free(pTest3); //4.釋放是傳入的地址和申請時的地方不同 int *pTest4 = (int *)malloc(10*sizeof(int)); assert(NULL != pTest4); pTest4[0] = 0; pTest4++; Do(); free(pTest4);}

C++中的動態內存管理

1、C++中使用new和delete運算符進行動態內存管理。 【new作用】 調用Operator new分配空間。 調用構造函數初始化對象。 【delete作用】 調用析構函數清理對象 調用operator delete釋放空間 【new[]作用】 調用operator new分配空間。 調用N次構造函數分別初始化每個對象。 【delete[]作用】 調用N次析構函數清理對象。(N是new[ ]出來的) 調用operator delete釋放空間

這里寫圖片描述

這里寫圖片描述 2、C++的其他內存管理接口(placement版本) void * operator new (size_t size); void operator delete (size_t size); void * operator new [](size_t size); void operator delete[] (size_t size); 1) operator new/operator delete operator new[]/operator delete[] 和 malloc/free用法一 樣。 2)他們只負責分配空間/釋放空間,不會調用對象構造函數/析構函數來初始化/清理對象。 3)實際operator new和operator delete只是malloc和free的一層封裝。

void Test() { int *p1 = new int; //動態分配4個字節(1個int)的空間單個數據 int *p2 = new int(2); //動態分配4個字節(1個int)的空間并初始化為2 int *p3 = new int[2]; //動態分配8個字節(2個int)的空間 delete p1; delete p2; delete[] p3; }

注意:new和delete、new[ ]和delete[ ]要匹配使用,否則會造成內存泄漏甚至崩潰的問題。 棧: 非靜態局部變量/函數參數/返回值等等,棧是向下增長的。 數據段: 存儲全局數據和靜態數據(包括局部靜態變量) 堆: 程序運行時的動態內存分配,可以向上增長的。 代碼段: 可執行的代碼和只讀常量。 3、malloc/free和new/delete的區別和聯系 1)都是動態內存管理的入口。 2)malloc/free是C/C++的標準庫函數,而new/delete是C++的操作符 3)malloc/free只是動態的分配內存空間/釋放空間。而new/delete除了分配空間還會調用構造函數和析構函數 4)malloc/free需要手動計算類型大小且返回值為void*,new/delete可以自己計算類型的大小,返回對應類型的指針。

class Array { public: Array(size_t size = 10) :_size(size) , _a(0) { cout << "Array(size_t size)" << endl; if (size > 0) { _a = new int[size]; } } ~Array() { cout << "~Array()" << endl; if (_a) { delete[]_a; _a = 0; _size = 0; } } PRivate: int* _a; size_t _size; }; void Test() { //malloc/free函數只是動態的分配內存空間/釋放空間。 Array* p1 = (Array*)malloc(sizeof(Array)); //new/delete操作符除了分配空間還會調用構造函數和析構函數來初始化和清理。 Array* p2 = new Array; //1個類類型 Array* p3 = new Array(20); //1個類類型并初始化為20 Array* p4 = new Array[10]; //10個類類型 free(p1); delete p2; delete p3; delete[] p4; } int main() { Test(); //程序結果構造函數和析構函數被調用12次。 return 0; }

4、定位new表達式 定位new表達式是在以分配的原始空間中調用構造函數初始化一個對象。 new(place_address) type; new(place_address) type(initializer-list); place_address必須是一個指針,initializer-list是初始化列表。 eg: 利用mallco/free和定位new表達式來模擬new/delete和new[]/delete[]:

class A { public: A(int a = 2) :_a(a) { cout << "A()" << endl; } void Print() { cout << _a << endl; } ~A() { cout << "~A()" << endl; } private: int _a; }; int main() { //分配1個A類型空間 A* pa = (A*)malloc(sizeof(A)); new(pa)A(1); //調用構造函數 pa->~A(); //調用析構函數 free(pa); cout << endl; //分配5個A類型的空間 A* pa1 = (A*)malloc(5 * sizeof(A)); for (int i = 0; i < 5; i++) { new(pa1 + i)A(i); //調用5次構造函數 } for (int i = 0; i < 5; i++) { (pa1+i)->~A(); //調用5次析構函數 } free(pa1); return 0; }

結果如下: 這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人在线视频网站| 国产成人精品久久亚洲高清不卡| 久久久久国产视频| 51视频国产精品一区二区| 久久免费精品日本久久中文字幕| 成人两性免费视频| 欧美性色19p| 免费97视频在线精品国自产拍| 正在播放欧美一区| 日韩av电影在线网| 日韩中文字幕网址| 黑人精品xxx一区一二区| 17婷婷久久www| 亚洲第一男人天堂| 欧美大片网站在线观看| 欧美视频第一页| 日韩精品中文字幕在线观看| 黑人极品videos精品欧美裸| 国产精品福利在线观看网址| 国产一区二区在线免费视频| 国产精品对白刺激| 亚洲性猛交xxxxwww| 色综合天天狠天天透天天伊人| 亚洲国内精品视频| 精品国产31久久久久久| 中文字幕免费精品一区| 欧美日韩国产成人高清视频| 国产精品扒开腿爽爽爽视频| 一区三区二区视频| 国产精品电影久久久久电影网| 中文字幕国产亚洲2019| 欧美激情视频免费观看| 日韩网站免费观看| 日韩美女激情视频| 国产精品99久久久久久久久久久久| 欧美激情影音先锋| 国产精品免费观看在线| 麻豆乱码国产一区二区三区| 国产九九精品视频| 国产伦精品一区二区三区精品视频| 亚洲国产日韩欧美在线99| 成人网在线视频| 亚洲成人亚洲激情| 午夜精品久久久久久久久久久久久| 日本欧美一二三区| 欧美大秀在线观看| 精品久久久久久久久久久久| 欧美激情2020午夜免费观看| 97av在线视频| 色婷婷久久av| 久久这里只有精品99| 欧美一区二三区| 精品久久久久久亚洲国产300| 一区二区av在线| 欧美黑人极品猛少妇色xxxxx| 欧美日韩国产综合视频在线观看中文| 国产精品男人的天堂| 国产自产女人91一区在线观看| 78m国产成人精品视频| 色偷偷88888欧美精品久久久| 亚洲最大福利视频网站| 九九热99久久久国产盗摄| 成人久久一区二区| 国产欧美日韩中文字幕在线| 欧美日韩国产综合视频在线观看中文| 亚洲成色777777在线观看影院| 欧美激情免费看| www.亚洲人.com| 亚洲精品mp4| 91网站在线看| 日韩一级黄色av| 国产亚洲精品美女| 精品调教chinesegay| 欧美激情网站在线观看| 奇米四色中文综合久久| 日韩免费视频在线观看| 久久99国产精品久久久久久久久| 国产精品18久久久久久麻辣| 亚洲伊人久久大香线蕉av| 久久精品国产一区二区三区| 欧美视频裸体精品| 另类少妇人与禽zozz0性伦| 欧美在线国产精品| 色综合久综合久久综合久鬼88| 欧美人与性动交| 日本高清+成人网在线观看| 2019日本中文字幕| 91久久精品国产91性色| 色yeye香蕉凹凸一区二区av| 日韩电影中文 亚洲精品乱码| 欧美国产日本高清在线| 亚洲va码欧洲m码| 亚洲欧美制服中文字幕| 日韩暖暖在线视频| 欧美一区二粉嫩精品国产一线天| 日韩av第一页| 国产视频自拍一区| 欧美成人精品一区二区三区| 成人羞羞国产免费| 亚洲美女动态图120秒| 2019中文字幕全在线观看| 日韩av最新在线| 欧美亚洲午夜视频在线观看| 久久久噜久噜久久综合| 麻豆精品精华液| 亚洲人精品午夜在线观看| 91最新国产视频| 日韩av一区在线观看| 欧美视频在线观看免费| 国产精品美女主播| 日韩中文字幕在线免费观看| 欧美日韩性视频在线| 日韩欧美在线免费| 91国语精品自产拍在线观看性色| 精品久久久久久电影| 欧美黑人性猛交| 精品视频—区二区三区免费| 久久久av电影| 久久精品国产免费观看| 91精品国产精品| 5566成人精品视频免费| 日韩欧美国产免费播放| 国产不卡一区二区在线播放| 欧美日韩午夜剧场| 久久伊人免费视频| 欧美自拍视频在线观看| 国产精品综合网站| 亚洲精品美女久久| 黑人精品xxx一区一二区| 国产成人精品日本亚洲专区61| 欧美另类极品videosbest最新版本| 国产一区二区三区网站| 国产精品视频中文字幕91| 久久久久久久久久久免费精品| 成人淫片在线看| 亚洲欧美另类国产| 91中文精品字幕在线视频| 国产一区二区三区毛片| 成人性生交大片免费看视频直播| 亚洲欧洲一区二区三区在线观看| 国产综合福利在线| 97婷婷涩涩精品一区| 热99在线视频| 欧美精品中文字幕一区| 欧美性xxxx极品hd欧美风情| 亚洲人成电影网站色…| 亚洲女性裸体视频| 一区二区三区四区在线观看视频| 国产成人精品视| 精品免费在线观看| 欧美在线视频播放| 国产综合久久久久| 国产精品第3页| 久久久av网站| 亚洲精品www久久久久久广东| 韩剧1988免费观看全集| 久久成人18免费网站| 日韩欧美中文字幕在线观看| 国产精品对白刺激| 日本一区二区三区四区视频| 亚洲最大福利视频网| 国产成人综合一区二区三区| 奇米影视亚洲狠狠色| 热久久这里只有精品|