更新時(shí)間:2021-08-23 12:03:40 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1555次
在iOS、android操作系統(tǒng)中,經(jīng)常會(huì)遇到入棧出棧的操作。 那么現(xiàn)在操作系統(tǒng)已經(jīng)不需要我們?nèi)リP(guān)心堆棧的操作。
比如:iOS中的ARC模式,android中的JVM都會(huì)幫我們自動(dòng)釋放內(nèi)存,自動(dòng)保持堆棧平衡。但是對(duì)于開發(fā)者來說,還是很有必要掌握堆棧平衡原理的。
那么讓我們來詳細(xì)討論下iOS的棧平衡。
首先,我們要明白什么情況下的代碼,會(huì)進(jìn)行出棧入棧的操作。
以O(shè)bjective-C語法為例:
重點(diǎn):
一個(gè)非常簡單的加法運(yùn)算,聲明了幾個(gè)局部變量。而局部變量a、b、c,在棧空間可用的情況下,通常存在棧空間。只要這個(gè)函數(shù)執(zhí)行完畢,a、b、c這三個(gè)變量就會(huì)出棧,即內(nèi)存銷毀。
我們所做的iOS程序用的都是高級(jí)語言,那么想運(yùn)行在手機(jī)或者電腦上就要經(jīng)過編譯鏈接。
如:高級(jí)語言->匯編語言->機(jī)器語言
既然高級(jí)語言要編譯成匯編語言,那么我們利用8086匯編,看底層是如何實(shí)現(xiàn)棧平衡的。
匯編代碼:
上面的代碼是“沒有進(jìn)行棧空間釋放”的,即只入棧不出棧。
看看執(zhí)行效果如何:
棧針在0710:0014
這表示未出棧,程序不結(jié)束的情況下,會(huì)一直占用棧空間。
我們修改下匯編代碼,看看正常的入棧出棧:
看下運(yùn)行效果
釋放棧空間之前
釋放之后,棧針回到原來的狀態(tài),正常入棧出棧
總結(jié):有入必有出,才能保證棧空間的正常。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"堆棧平衡原理",希望對(duì)大家有幫助,想了解更多可查看Java堆棧。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743