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