深層理解-棧平衡原理


深層理解-棧平衡原理-底層是如何實現棧平衡的?

 

     在iOS、android操作系統中,經常會遇到入棧出棧的操作。 那么現在操作系統已經不需要我們去關心堆棧的操作。

         比如:iOS中的ARC模式,android中的JVM都會幫我們自動釋放內存,自動保持堆棧平衡。但是對於開發者來說,還是很有必要掌握堆棧平衡原理的。

    那么今天讓我們來詳細討論下iOS的棧平衡。

    首先,我們要明白什么情況下的代碼,會進行出棧入棧的操作。

    以Objective-C語法為例:

                   

    重點:

    一個非常簡單的加法運算,聲明了幾個局部變量。而局部變量a、b、c,在棧空間可用的情況下,通常存在棧空間。只要這個函數執行完畢,a、b、c這三個變量就會出棧,即內存銷毀。

    我們所做的iOS程序用的都是高級語言,那么想運行在手機或者電腦上就要經過編譯鏈接。

    如:高級語言->匯編語言->機器語言

    既然高級語言要編譯成匯編語言,那么我們利用8086匯編,看底層是如何實現棧平衡的。

    匯編代碼:

    

 

    上面的代碼是“沒有進行棧空間釋放”的,即只入棧不出棧。

    看看執行效果如何:

1.1 棧針在0710:0014

 

 

     1.2 這表示未出棧,程序不結束的情況下,會一直占用棧空間。

 

    我們修改下匯編代碼,看看正常的入棧出棧:

 

看下運行效果

 

 2.1 釋放棧空間之前

2.2 釋放之后,棧針回到原來的狀態,正常入棧出棧

 

    總結:有入必有出,才能保證棧空間的正常。

    上面就是入棧出棧,關於棧平衡的原理了。轉載請注明出自於數字先生。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM