1、 堆內存的作用
程序在內存中有4個區(qū)域,即代碼區(qū)、全局數(shù)據(jù)區(qū)、棧區(qū)和堆區(qū)。全局數(shù)據(jù)區(qū)、棧區(qū)都是靜態(tài)分配區(qū)域;堆是程序運行時動態(tài)使用的一個內存空間,如果要在堆中分配內存空間,必須使用特定的函數(shù)和操作符。另外,若不再需要分配的空間則必須釋放。
2、 堆內存的申請和釋放
malloc與free和new/delete是C++的運算符,它們都可用于申請動態(tài)內存和釋放內存,但是malloc/free無法滿足動態(tài)對象的要求。對象在創(chuàng)建的同時要自動執(zhí)行構造函數(shù),對象在消亡之前要自動執(zhí)行析構函數(shù)。由于malloc/free是庫函數(shù)而不是運算符,不在編譯器控制權限之內,不能夠把執(zhí)行構造函數(shù)和析構函數(shù)的任務強加于malloc/free。因此C++語言需要一個能完成動態(tài)內存分配和初始化工作的運算符new,以及一個能夠完成清理和釋放內存工作的運算符delete。
malloc函數(shù)的原型為:
void * malloc(unsigned long);
參數(shù)unsigned long類型的表達式,用來表示需分配的內存單元(單位是字節(jié))數(shù)量。函數(shù)返回void *型的指針,指向分配內存塊的首地址。由于malloc函數(shù)返回的地址是void*類型,因此不能直接被使用,所以引用該函數(shù)時都必須進行類型轉換。
free的函數(shù)原型為:
void free(void *);
用malloc函數(shù)在堆內分配的空間系統(tǒng)不會自動釋放,必須由程序設計者在程序中用free函數(shù)來釋放。
C++所獨有的開辟和釋放對內存空間的方法——new修飾符和delete修飾符,new和delete修飾符的操作并不需要頭文件的支持,這是C++所獨有的new操作要比malloc更為簡單,直接說明開辟的類型的數(shù)目就可以了,delete使用的時候如果是數(shù)組那么必須使用delete[]。
3、 實例代碼
(未完待續(xù))
想要獲得更多內容,可點擊:《Visuanl C++代碼參考與技巧大全》學習筆記——索引隨筆