Stack 與Heap 有何差別. 程式設計相關的行業 - Medium
文章推薦指數: 80 %
什麼叫做Heap ? Heap 是一種保留一大塊夠用的記憶題,讓程式方便配置它所需要的資料。
真的顧名思義, Heap 就是堆放空間的意思。
程式可以有許多 ...
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWriteStack與Heap有何差別程式設計相關的行業,經常有面試人詢問這個問題:「Stack與Heap有何差別」。
以我的想法,未經思考的時候,大概會回答說,我知道Stack是什麼,因為在資料結構課程有學過,但是,關於Heap,則是在一些程式語言搭配的虛擬環境(VM)裡頭有聽說過。
可是,像我一樣很熟悉填空題、問答題,卻不熟悉申論題的人,到底要怎麼談呢?什麼叫做……什麼叫做Stack?Stack是一種讓資料後進先出、或說讓資料先進後出的資料組織方式。
資料存放於Stack的先後順序非常符合程式運作的格式:有個function先運作,function的參數變數與傳回值指標都存放在Stack頂端,然後這個function呼叫另一個function,接著新呼叫的function將它的參數變數與傳回值指標包裹為一個包(稱為frame),然後將這個包壓在Stack的頂端。
後來,當那個新呼叫的function執行完畢,系統會將Stack頂端,對應給那個function的frame退出,同時,程式回到前一個function,這個function由Stack頂端的frame取回它的資料。
什麼叫做Heap?Heap是一種保留一大塊夠用的記憶題,讓程式方便配置它所需要的資料。
真的顧名思義,Heap就是堆放空間的意思。
程式可以有許多變數,而程式中所包含的各種變數所包含的資料,可以擺放在Heap的任何位置,並且,每一筆資料的大小都可以變大或變小。
在Heap中的每一筆資料,做為一個物件,可以附掛許多筆參考鏈路(reference),而假如有一筆資料已經不受任何參考時,它之後會受GarbageCollector清除,而釋出所占用的空間。
Heap的管理方式,各種系統有些微不同。
可能有某個系統,以配置陣列為例,要擴大一個陣列的配置空間時,它把舊的配置空間取消而留待GarbageCollector清除,然後,在Heap另外找一塊連續、完整的區域,來配置新的陣列儲存空間,於是這個陣列獲得新的儲存位置,以及新的資料大小。
Stack與Heap都是在記憶體上組織資料的方式。
所以差別在哪裡?簡單說,Stack是拿來給程式呼叫function時存放function資料用的,而Heap是用來存放並且管理,程式全部所需要用到的變數與資料。
參考資訊https://www.i-programmer.info/ebooks/48-deep-cboxouts/363-stack-and-heap-memory-allocation.htmlMorefromYau-HsienHuangFollowLovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstartedYau-HsienHuang26FollowersFollowMorefromMediumRyuyaUetakeinAnyMindGroup[TechBlog]HowtoEditandupdatethevaluesofmetafieldsfromtheAccountPage?AlejandroCantuCS373Spring2022:AlejandroCantuZaakKerstetterWhatisDestructuring?YashodharaPitawelaKoaHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1[CS] 堆疊和堆積(Stack Memory and Heap ... - PJCHENder
heap 是程式語言用來保存全域變數(global variables)的記憶體位址,預設的情況下,所有全域變數都會保存在heap memory 中。
- 2記憶體- stack 與heap - iT 邦幫忙::一起幫忙解決難題
- 31.4.2 Heap Tree - 資料結構&演算法筆記 - GitBook
- 4stack和heap的區別@ 程式專欄 - 隨意窩
其操作方式類似於數據結構中的棧。2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事, ...
- 5堆積- 维基百科,自由的百科全书
堆(英語:Heap)是计算机科学中的一種特別的完全二叉树。若是滿足以下特性,即可稱為堆積:「給定堆積中任意節點P和C,若P是C的母節點,那麼P的值會小於等於(或大於 ...