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操作系统是针对不同场景,会提供不同的内存管理方案,有以下几种方案
- TaggedPointer

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

被折叠的 条评论
为什么被折叠?



