文档章节

深层理解-栈平衡原理

o
 osc_a22drz29
发布于 2019/03/27 18:22
字数 498
阅读 7
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

 

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

 

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

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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Java线程池

前言 Java中对线程池的抽象是ThreadPoolExecutor类,Executors是一个工具类,内置了多种创建线程池的方法: newFixedThreadPool:固定长度线程池 newCachedThreadPool :可缓存线程池 newSin...

nullpointerxyz
21分钟前
35
0
Python笔记:用Python制作二维码

这些年,二维码在我国的日常使用频率特别大。因为其具有简单及安全性吧!除了用网络工具制作二维码,其实用JavaScript或Python也可以制作二维码,而且更有个性。 示例一(制作普通黑白二维码...

tengyulong
33分钟前
0
0
Redis-初体验/数据结构

定义: Redis 是 C 语言开发的一个开源的(遵从 BSD 协议)高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。它是一种 NoSQL(not-only sql,泛指非关系型数据库...

心田已荒
35分钟前
15
0
如何在保留订单的同时从列表中删除重复项? - How do you remove duplicates from a list whilst preserving order?

问题: Is there a built-in that removes duplicates from list in Python, whilst preserving order? 是否有内置的程序在保留顺序的同时从Python列表中删除重复项? I know that I can us...

fyin1314
今天
29
0
以太坊智能合约开发常见的10个安全问题

本文介绍CheckMarx安全研究小组通过扫描公开的以太坊智能合约所发现的Solidity智能合约开发中常见的十大安全问题,其中__未检查的外部调用__ 和 高成本循环 分列排行榜前两名。该安全问题排行...

区块链教程
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部