iOS堆和栈的使用小结
堆和栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。堆,队列优先,先进先出(FIFO—first in first out);栈,先进后出(FILO—First-In/Last-Out)。一般情况下,如果有人把堆栈合起来说,那它的意思是栈,而不是堆。
1、管理方式不同;
管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。
2、空间大小不同;
空间大小:栈是一块空间较小,但是运行速度很快的内存区域。栈上的内存分配遵循后进先出的原则,通过移动栈的尾指针实现 push(入栈)和 pop(出栈)操作。我们的程序是由一个个方法组成的,CPU 会负责调度并执行这些方法。当我们的程序执行到某个方法的时候,需要在栈上为方法需要的内存开辟空间,此时把栈的尾指针向栈底移动。当方法执行完毕后需要释放掉这些空间,此时会把栈的尾指针移向栈顶,这就完成了一次栈上的内存分配。只要栈的剩余空间大于stack 对象申请创建的空间,操作系统就会为程序提供这段内存空间,否则将报异常提示栈溢出。
堆是内存中的另一块区域,空间比栈大的多,但是运行速度要比栈上的运行速度慢。堆可以在运行时动态的分配内存,补充栈上内存分配的不足。一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。
总之记住一句话,OC对象存放于堆里面(堆内存要程序员手动回收),非OC对象一般放在栈里面(栈内存会被系统自动回收)
Swift中的使用
Swift 中的数据类型分为引用类型(类)和值类型(枚举、结构体)。引用类型存储在 “堆” 上,值类型存储在 “栈” 上。Swift 管理引用类型采用自动引用计数(ARC)的管理方法。值类型是由处理器来管理的,不需要程序员来管理。
iOS堆和栈的使用小结的更多相关文章
- 【转载】iOS堆和栈的理解
操作系统iOS 中应用程序使用的计算机内存不是统一分配空间,运行代码使用的空间在三个不同的内存区域,分成三个段:“text segment “,“stack segment ”,“heap segme ...
- iOS 堆和栈 的理解
本文部分内容整理于网络,感谢原作者. 堆(heap)和栈(stack)是C/C++编程不可避免会碰到的两个基本概念.首先,这两个概念都可以在讲数据 结构的书中找到,他们都是基本的数据结构,虽然栈更为简 ...
- iOS 堆和栈的区别和联系
堆和栈的区别主要有以下五点: 1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来讲,释放工作由程序员控制,容易产生memory leak(内存泄露). 2.申请大小: 栈是向低地 ...
- iOS开发中的内存分配(堆和栈)
进程的内存分区 所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先 ...
- iOS:堆(heap)和栈(stack)的理解
Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release 栈由编译器管理自动释放的,在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函数的话就 ...
- iOS中堆和栈的区别
管理方式: 对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来讲,释放工作有程序员控制,容易产生memory Leak. 申请大小: 栈:在Windows下,栈是向低地址扩展的数据结构,是一块 ...
- ios 基础知识篇 堆和栈的区别
前言 堆和栈是什么?有什么区别?是干嘛的? 内存管理 移动设备的内存及其有限,每一个APP所能占用的内存是有限制的 (吐槽一下:iPhone6s还是16G起步,还好我也买不起->_-> 扯 ...
- iOS面试-堆和栈的区别
堆和栈的区别: 一.堆栈空间分配区别: 1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈: 2.堆(操作系统): 一般由程序员分配释放, ...
- JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面 ...
- C语言堆栈入门——堆和栈的区别
来看一个网上很流行的经典例子: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc& ...
随机推荐
- 对比python学julia(第二章)--(第一节)隔沟算样—枚举策略
1.1. 问题描述 在明代数学家程大位的<算法统宗>著作中记载了这样一道数学题: 甲乙隔沟放牧,二人暗里参详. 甲云得乙九个羊,多你一倍之上. 乙说得甲九只,两家之数相当. 两边闲坐恼心 ...
- 【H5】05 高阶文字排版
摘自: https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Introduction_to_HTML/Advanced_text_formattin ...
- 【Zookeeper】03 单机操作
访问Zookeeper 开启Zookeeper服务程序: ./zkServer.sh start 启动Zookeeper客户端进行访问: ./zkCli.sh 运行打印: [root@VM-0-7-c ...
- 使用AI模型替代工业仿真过程
引自: https://www.zhihu.com/question/641951284/answer/3384531468 使用AI模型替代工业仿真,如:CAE,等等,进行仿真环境的求解运算.
- [python] Python并行计算库Joblib使用指北
Joblib是用于高效并行计算的Python开源库,其提供了简单易用的内存映射和并行计算的工具,以将任务分发到多个工作进程中.Joblib库特别适合用于需要进行重复计算或大规模数据处理的任务.Jobl ...
- 基于MonoGame重制《俄罗斯方块》游戏
两年前,我使用C#基于MonoGame编写了一款<俄罗斯方块>游戏,相关介绍可以参考[这篇文章].最近,使用业余时间将之前的基于MonoGame的游戏开发框架重构了一下,于是,也就趁此机会 ...
- springcloud线上发布超时之feign(ribbon饥饿加载)
springcloud线上发布超时系列文章: springcloud线上发布超时之feign(ribbon饥饿加载) springcloud线上发布超时之grpc springcloud线上发布超时方 ...
- UCX84X笔记
1. 管脚定义 COMP: 误差放大器补偿引脚.将外部补偿元件连接到此引脚,以修改误差放大器输出.误差放大器内部有电流限制,因此用户可以通过外部强制COMP接地来命令零占空比. UCx84x系列中的误 ...
- 移除 Parallels Access Sound 虚拟设备
在安装了 Parallels 之后,发现 Mac 没声音,打开声音设置一看音频输出设备被设为了 Parallels Access Sound.把输出设备调回 MacBook 扬声器就有声音了. 但是音 ...
- STL 改造红黑树 模拟封装set和map
改造红黑树 目录 改造红黑树 适配STL迭代器的红黑树 基本结构 RBTreeNode __RBTree_iterator RBTree 完整代码 封装的set 封装的map 在初次看STL中实现红黑 ...