Stack 與Heap 有何差別. 程式設計相關的行業 - Medium

文章推薦指數: 80 %
投票人數:10人

什麼叫做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



請為這篇文章評分?