内存管理
内存管理 环境包括:
- 内存布局(五大区、全局变量、静态变量...)
- 内存管理方案(散列表、ARC、MRC、tagged pointer、none point...)
- RAC&MRC
- 引用计数
- 弱引用(weak维护了一和弱引用表)
- 自动释放池(涉及到RunLoop)
内存布局 五大块:
- 栈区:函数,方法
- 堆区:通过alloc分配的对象,block copy
- BSS段:未初始化的全局变量,静态变量
- 数据段:初始化的全局变量,静态变量
- text:程序代码,加载到内存中
- 栈区内存地址:一般为:0x7开头
- 堆区内存地址:一般为:0x6开头
- 数据段,BSS内存地址:一般为:0x1开头
面试题:全局变量和局部变量是否有区别?如果有,有什么区别?
答:有,位置不同,所以访问权限不同,前者可供全局访问,后者在内部访问
答:有,位置不同,所以访问权限不同,前者可供全局访问,后者在内部访问
面试题:Block是否可以修改全局变量?
答:可以修改,因为全局变量的作用域很大
内存管理方案:
- TaggedPointer:小对象-NSNumber,NSDate
- NONPOINTER_ISA:非指针型isa
- 散列表:引用计数表,弱引用表