棧與堆的區別以及增長方向

Perseverance001發表於2018-05-27

堆和棧的區別:
  一、堆疊空間分配區別:
1、棧(作業系統):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧;
2、堆(作業系統): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收,分配方式倒是類似於連結串列。
  二、堆疊快取方式:
1、棧使用的是一級快取, 他們通常都是被呼叫時處於儲存空間中,呼叫完畢立即釋放;
2、堆是存放在二級快取中,生命週期由虛擬機器的垃圾回收演算法來決定(並不是一旦成為孤兒物件就能被回收)。所以呼叫這些物件的速度要相對來得低一些。
  三、堆疊資料結構區別:
  堆(資料結構):堆可以被看成是一棵樹,如:堆排序;
  棧(資料結構):一種先進後出的資料結構。

對於堆來講,生長方向是向上的,也就是向著記憶體地址增加的方向

對於棧來講,它的生長方向是向下的,是向著記憶體地址減小的方向增長。

相關文章