iOS 进阶 - 内存管理(一)-- 内存布局
内存布局
上面的图代表一个内存区域,内存区域分为内核区的内存(最上边),程序加载的空间(中间),保留的内存空间(最下面)
地址的表示是由下到上是低地址到高地址
程序加载到内存会分成三段:未初始化区,已初始化区和代码段
- 代码段: 我们写的程序所有的代码数据段都在代码段(.text)中
- 已初始化区: 我们声明的已初始化的静态变量,全局变量都在已初始化数据区(.data)中
- 未初始化区: 我们声明的未初始化的静态变量,全局变量都在未初始化数据区(.bss)中
- 堆区(heap): 创建的对象,或者block经过copy之后,都会被转移到堆上面,堆是向上增长的
- 栈区(stack): iOS定义的方法和函数都是在栈上工作,栈是从高地址到低地址进行扩展,所以说栈是向下扩展
不同内存段分别代表的详细含义:
- stack: 代表栈区,栈区一般都是方法调用会在这个内存区进行展开。
- heap: 代表堆区,通过alloc等分配的对象,实际上都是在堆上面体现的。
- bss: 未初始化的全局变量/静态变量等
- data: 已初始化的全局变量等
- text: 程序代码,加载到内存后都放在text段中