内存分为几个区?
- 代码区
- 全局静态区(global)
- 堆区(heap)
- 栈区(stack)
内存中,不同区分别存放什么?
- 代码区:存放类,分类编译后的数据。(编译即存在)
- 全局静态区: 主要存放静态数据,全局数据和常量,程序运行之后一直存在。(编译即存在)
- 堆区:存放alloc,new等关键字生成的对象。
- 栈区: 主要存放局部变量和函数参数等相关变量,超出作用域之后自动释放。
iOS常说的内存管理,到底管理的什么呢?
说到iOS的内存管理,大家首先想到的可能是引用计数相关的东西,而跟引用计数相关的内存都是分布在堆区(heap),也就是说我们平时关注最多的部分都是堆区的内存。
经验之谈 根据指针看内存位置
OC中打印对象地址,然后根据6堆7栈1静态原则,区分出对象在内存什么位置。 举例:
BlockTest[9499:776114] a: 0x7ffee83f7fac 其中 0x7 说明开辟内存在栈区
BlockTest[9499:776114] b: 0x107808828 其中 0x1 说明开辟内存在静态区
BlockTest[9499:776114] array1: 0x600003598720 其中 0x6 说明开辟内存在堆区
网友评论