C++內存分區——堆空間

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)不同大小的堆空間將會產生堆內碎塊。使用堆空間往往由於:
   .直到運行時才能知道需要多少對象空間;
   .不知道對象的生存期到底有多長;
   .直到運行時才知道一個對象需要多少內存空間;

發佈了12 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章