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