堆棧的區別

要了解堆和棧的區別,我們首先要了解系統的分區

wKioL1ciEwPCwSF5AAFcJ9qziH8088.jpg

BSS(Block Started by Symbol)通常是指用來存放程序中未初始化的全局變量和靜態變量的一塊內存區域.

數據段(data segment)通常是指用來存放程序中已初始化的全局變量的一塊內存區域.

代碼段(code segment / text segment)通常是指用來存放程序執行代碼的一塊內存區域


棧區(stack)— 由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其 

操作方式類似於數據結構中的棧。  

堆區(heap)一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表代碼的一塊內存區域。

 再次,必須明白一點也是非常重要的的一點,棧是向下生長,所謂的向下生長是指從高地址->低地址的路徑延伸。從而棧有棧底和棧頂,那麼棧頂的地址比棧底低。然後堆是向上生長的。

最後引用一句高手的的來做總結:

堆和棧的區別可以用如下的比喻來看出:    
  使用棧就象我們去飯館裏吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就  
  走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自  
  由度小。    
  使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由  
  度大。   (經典!) 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章