Stack筆記

數(shù)據(jù)結(jié)構(gòu)中的Stack是一組數(shù)據(jù)的存取方式,后進(jìn)先出 LIFO ?Last In First out

主要有以下幾類操作:


push 在頂層加入數(shù)據(jù);pop 返回并移除頂層數(shù)據(jù);top 返回頂層數(shù)據(jù);isempty 返回一個布爾值,標(biāo)識當(dāng)前stack是否為空stack

call stack 指的是程序代碼實現(xiàn)中函數(shù)、方法之間相互調(diào)用的順序形成的調(diào)用棧。

本質(zhì)是內(nèi)存中存放成員變量 局部變量等基本數(shù)據(jù)類型的空間,堆內(nèi)存一般存放的是引用類型,在棧內(nèi)存中存在一個變量,其值記錄著該堆內(nèi)存的地址作為引用,指向該實例,方便后續(xù)調(diào)用、處理。每一個線程一個stack,而進(jìn)程則是共享一個heap,stack是線程獨占的,heap是進(jìn)程內(nèi)所有線程共享的。一個線程創(chuàng)建時,其stack是固定的,一旦程序執(zhí)行過程中,其stack數(shù)據(jù)超過該棧大小,發(fā)生stack overflow,而heap堆大小則是不固定的,可以申請。但由于一個線程執(zhí)行完畢后,相應(yīng)的stack數(shù)據(jù)會被釋放,對應(yīng)的所指向的堆內(nèi)存數(shù)據(jù)可能不存在引用,即被稱之為垃圾,將在垃圾回收環(huán)節(jié)被回收,如果不回收則可能會存在內(nèi)存泄露的可能性。

jvm里面說一個線程對應(yīng)一個虛擬機(jī)棧,而堆是針對的整個虛擬機(jī)的運行過程中的

stack內(nèi)變量的分配速度會比heap快很多,只需要修改sp寄存器,heap內(nèi)分配需要調(diào)用malloc(malloc調(diào)用heap分配實現(xiàn)的,而不是heap分配調(diào)用malloc。)。stack的尋址也會比heap快,通過sp/fp寄存器間接尋址。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容