1、 堆內(nèi)存的作用
程序在內(nèi)存中有4個(gè)區(qū)域,即代碼區(qū)、全局?jǐn)?shù)據(jù)區(qū)、棧區(qū)和堆區(qū)。全局?jǐn)?shù)據(jù)區(qū)、棧區(qū)都是靜態(tài)分配區(qū)域;堆是程序運(yùn)行時(shí)動(dòng)態(tài)使用的一個(gè)內(nèi)存空間,如果要在堆中分配內(nèi)存空間,必須使用特定的函數(shù)和操作符。另外,若不再需要分配的空間則必須釋放。
2、 堆內(nèi)存的申請(qǐng)和釋放
malloc與free和new/delete是C++的運(yùn)算符,它們都可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存,但是malloc/free無(wú)法滿足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建的同時(shí)要自動(dòng)執(zhí)行構(gòu)造函數(shù),對(duì)象在消亡之前要自動(dòng)執(zhí)行析構(gòu)函數(shù)。由于malloc/free是庫(kù)函數(shù)而不是運(yùn)算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于malloc/free。因此C++語(yǔ)言需要一個(gè)能完成動(dòng)態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new,以及一個(gè)能夠完成清理和釋放內(nèi)存工作的運(yùn)算符delete。
malloc函數(shù)的原型為:

參數(shù)unsigned long類型的表達(dá)式,用來(lái)表示需分配的內(nèi)存單元(單位是字節(jié))數(shù)量。函數(shù)返回void *型的指針,指向分配內(nèi)存塊的首地址。由于malloc函數(shù)返回的地址是void*類型,因此不能直接被使用,所以引用該函數(shù)時(shí)都必須進(jìn)行類型轉(zhuǎn)換。
free的函數(shù)原型為:

用malloc函數(shù)在堆內(nèi)分配的空間系統(tǒng)不會(huì)自動(dòng)釋放,必須由程序設(shè)計(jì)者在程序中用free函數(shù)來(lái)釋放。
C++所獨(dú)有的開辟和釋放對(duì)內(nèi)存空間的方法——new修飾符和delete修飾符,new和delete修飾符的操作并不需要頭文件的支持,這是C++所獨(dú)有的new操作要比malloc更為簡(jiǎn)單,直接說(shuō)明開辟的類型的數(shù)目就可以了,delete使用的時(shí)候如果是數(shù)組那么必須使用delete[]。
3、 實(shí)例代碼
(未完待續(xù))
想要獲得更多內(nèi)容,可點(diǎn)擊:《Visuanl C++代碼參考與技巧大全》學(xué)習(xí)筆記——索引隨筆