iOS面试题(十八)内存管理--内存布局&内存管理方案&数据结构

本文深入探讨iOS内存管理,涵盖内存布局、ARC与MRC、引用计数机制、弱引用表及自动释放池原理。解析非指针型ISA、散列表、自旋锁等关键数据结构,以及SideTable在内存管理中的作用。

5.内存管理

  • 内存布局
  • 内存管理方案(更好的简述内存管理方案相关的问题,就要明白他们的数据结构)
  • 数据结构
  • ARC&MRC(什么是ARC,什么是MRC,他们的区别以及各自实现的机制、原理)
  • 引用计数机制(什么是引用计数机制?内存是怎样管理的?)
  • 弱引用表(我们声明weak的一个变量,为什么在内存释放的时候,weak指针会自动置为nil?弱引用变量内存是怎么管理的?)
  • 自动释放池(AutoReleasePool)的实现机制和原理是怎样的?
  • 循环引用

 

内存布局
 

上面的图代表一个内存区域,内存区域分为内核区的内存(最上边),程序加载的控件(中间),保留的内存空间(最下面)
地址的表示是由下到上是低地址到高地址
比如说程序加载到内存会分成三段:未初始化区,已初始化区和代码段
代码段: 我们写的程序所有的代码数据段都在代码段(.text)中
  • 已初始化区: 我们声明的已初始化的静态变量,全局变量都在已初始化数据区(.data)中
  • 未初始化区: 我们声明的未初始化的静态变量和枚举变量都在未初始化数据区(.bss)中
  • 栈区(stack): iOS定义的方法和函数都是在栈上工作,
                         栈是从高地址到低地址进行扩展,所以说栈是向下扩展
  • 堆区(heap): 创建的对象,或者block经过copy之后,都会被转移到堆上面,堆是向上增长的

不同内存段分别代表的详细含义:
stack: 代表栈区,栈区一般都是方法调用会在这个内存区进行展开。
heap: 代表堆区,通过alloc等分配的对象,实际上都是在堆上面体现的。
bss: 未初始化的全局变量/静态变量等
data: 已初始化的全局变量等
text: 程序代码,加载到内存后都放在text段中

内存管理方案

iOS操作系统是怎么对内存进行管理的?


iOS操作系统是针对不同场景,会提供不同的内存管理方案,有以下几种方案

  1.  TaggedPointer
     
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值