C++程序的內純格局通常分爲4個區:
1.數據區(Data Area)
2.代碼區(Code Area)
3.棧區(Stack Area)
4.堆區(即自由存儲區)(Heap Area)
全局變量、靜態變量、常量存放在數據區,所有類成員函數和非成員函數代碼存放在代碼區,爲運行函數而分配的局部變量、函數參數、返回數據、返回地址等存放在棧區,餘下的空間爲堆區。
因爲堆是有限的,它可能變得擁擠,如果堆中沒有足夠的自由空間以滿足內存的需要時,那麼此需要失敗,並且返回一個空指針。因此,必須在使用NEW生成的指針之前進行檢查,方法如下:
HeapClass *pa1 , *pa2;
pa1 = new HeapClass(4); // 分配空間
pa2 = new HeapClass (); // 分配空間
if(!pa1 || !pa2){ // 檢查空間
cout<<"out of Memory"<<endl;
return;
}
一般來說,堆空間相對其他內存空間比較空閒,隨要隨拿,給程序運行帶來了較大的自由度,但是管理堆區是一件十分複雜的工作,頻繁地分配(NEW)和釋放(DELETE)不同大小的堆空間將會產生堆內碎塊。使用堆空間往往由於:
.直到運行時才能知道需要多少對象空間;
.不知道對象的生存期到底有多長;
.直到運行時才知道一個對象需要多少內存空間;
C++內存分區——堆空間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.