欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深层理解-栈平衡原理

程序员文章站 2022-03-26 21:55:41
深层理解-栈平衡原理-底层是如何实现栈平衡的? 在iOS、android操作系统中,经常会遇到入栈出栈的操作。 那么现在操作系统已经不需要我们去关心堆栈的操作。 比如:iOS中的ARC模式,android中的JVM都会帮我们自动释放内存,自动保持堆栈平衡。但是对于开发者来说,还是很有必要掌握堆栈平衡 ......

深层理解-栈平衡原理-底层是如何实现栈平衡的?

 

     在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 释放之后,栈针回到原来的状态,正常入栈出栈

 

    总结:有入必有出,才能保证栈空间的正常。

    上面就是入栈出栈,关于栈平衡的原理了。转载请注明出自于数字先生。