1. 程式人生 > >計算機中的堆、棧和靜態儲存區的區別

計算機中的堆、棧和靜態儲存區的區別

一個由C/C++編譯的程式佔用的記憶體分為以下部分: 
  1、棧區—由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。
  2、堆區—由程式設計師分配釋放,即動態申請的區域,若程式設計師不釋放,程式結束時可能由系統回收。
  3、全域性區(靜態區)(static)—,全域性變數和靜態變數的儲存是放在一塊的,初始化的。 
  全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後由系統釋放。 

棧中:   
  由系統自動分配。   例如,宣告在函式中一個區域性變數   int   b;   系統自動在棧中為b開闢空 
  間   
堆中:   
  需要程式設計師自己申請,並指明大小,在c中malloc函式   
  如p1=(char   *)malloc(size)
  在C++中用new運算子   
  如p2   =   new   char[size]
  但是注意p1、p2本身是在棧中的。  


存取效率的話是在由系統自動申請和釋放控制的棧效率更快。