论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
移动端开发
›
IOS
›
对iOS的内存存储的一些理解
对iOS的内存存储的一些理解
王柳
论坛元老
|
2024-8-29 15:11:49
|
显示全部楼层
|
阅读模式
楼主
主题
1911
|
帖子
1911
|
积分
5733
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
最近写项目标时间遇到了一些内存上的问题(比如内存泄漏等等),通过网上的方法解决后,好奇iOS的数据是如何存储的,特记于此。
一、iOS的内存区域
iOS 中应用程序使用的盘算机内存不是统一分配空间,运行代码使用的空间在三个差别的内存区域,分成三个段:“text segment “,“stack segment ”,“heap segment ”。
栈(Stack):
当我们创建一个
值类型
,如布局体,系统将其存储在一个被称为栈的内存区域中,是由CPU直接受理和优化的。当
一个函数声明一个变量
,变量将存储在栈中,当函数调用完毕后栈会主动开释该变量。因此栈是非常易于管理的、有效的,由于是CPU直接控制,速率非常快。
栈使用的是一级缓存,被调用完毕后会直接开释。
堆(Heap):
当我们创建了一个
引用类型
,如类,系统将把类实例存储在一个被称为堆的内存区域中。系统使用堆来存储其他对象引用的数据。堆是一个大的内存池,系统可以从该池中请求并
动态分配
内存块。
留意:堆是动态分配内存的,堆不会像栈一样主动开释对象,需要额外的工作来完成。这使得在堆中创建和删除数据比栈慢。并且假如程序员不开释的话,就会造成内存泄漏。
BSS:
存储未被初始化的全局变量和静态变量。
Data:
存储已经初始化的全局变量和静态变量,是静态内存分配。
代码区(text segment ):
程序代码(比如操作码(指令)等)。
栈和队列都是动态分配区
其余为静态分配区
二、静态分配和动态分配
1、静态存储方式
程序未运行,编译阶段根据需要分配固定的存储空间。
2、动态存储方式
是指在程序运行期间根据需要进举措态的分配存储空间的方式。
动态存储变量是在程序执行过程中,使用它时才分配存储单位, 使用完毕立即开释。 (例如函数的调用,参数的使用)。
三、堆、栈的区别
堆(数据布局):堆可以被看成是一棵树,如:堆排序。
栈(数据布局):一种先进后出的数据布局。
区别:
1、管理方式差别;
栈的开释是由编译器操作的,而
堆得由程序员手动开释
,否则会发生内存泄漏。
2、存储方式差别;
堆的存储是碎片化的
,就像一个内存池(大概树)一样,假如有多个owner就会造成程序的缓慢。而栈是先进后出的数据布局,存储的内存是一个接一个的,以至于永久都不大概有一个内存块从栈中间弹出。
3、分配方式差别;
堆都是动态分配的,没有静态分配的堆
。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。
动态分配由alloca函数进行分配
,但是栈的动态分配和堆是差别的,他的动态分配是由编译器进行开释,无需我们手工实现。
4、空间大小差别;
栈的空间很小,且是由CPU直接调理并执行的,所以运行很快。
堆的空间很大,就像一个大鱼塘。iOS使用了名为 ARC(主动引用计数)的技术。在多线程情况中,多个线程会共享堆上的内存,为了确保线程安全,不得不在堆上进行加锁操作,但是加锁操作是很泯灭性能的,你在堆上所获的的数据安全性实际上是在牺牲性能的代价下得来的。
NSString 的对象就是stack 中的对象,NSMutableString 的对象就是heap 中的对象。
四、常见的存储区域
全局变量存储在静态存储区域,在程序运行的时间始终占据固定的区域。
局部变量存储在堆栈中,即动态存储区域。
常量存储在特别的常量静态存储区。
swift的数据类型分为值类型和引用类型,一样平常来说,值类型存储在栈上,而引用类型存储在堆上,但实际上是视情况而定的。具体可参考iOS里变量在内存中的存储方式 - 掘金
五、数据持久化
参考:
https://www.jianshu.com/p/cb10f2c0aa93
https://www.jianshu.com/p/39ba5db32bb5
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王柳
论坛元老
这个人很懒什么都没写!
楼主热帖
Keytool配置 Tomcat的HTTPS双向认证 ...
NSIS官方认证插件集成安装包 ...
【小程序】图解小程序平台架构及其特征 ...
[网鼎杯 2020 朱雀组]Think Java——wp ...
校园网组网方案的设计
太方便了,钉钉上就可完成代码发布审批 ...
利用Python生成随机密码,灰常简单 ...
腾讯开源的 3 个 GitHub 项目,足够良 ...
Ansible 学习笔记 - 批量巡检站点 URL ...
Google Earth Engine(GEE)——Kmeans ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
云原生
Postrge-SQL技术社区
Oracle
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表