iOS 进阶 - 内存管理(一)-- 内存布局

内存布局

iOS 进阶 - 内存管理(一)-- 内存布局上面的图代表一个内存区域,内存区域分为内核区的内存(最上边),程序加载的空间(中间),保留的内存空间(最下面)
地址的表示是由下到上是低地址到高地址
程序加载到内存会分成三段:未初始化区,已初始化区和代码段

  • 代码段: 我们写的程序所有的代码数据段都在代码段(.text)中
  • 已初始化区: 我们声明的已初始化的静态变量,全局变量都在已初始化数据区(.data)中
  • 未初始化区: 我们声明的未初始化的静态变量,全局变量都在未初始化数据区(.bss)中
  • 堆区(heap): 创建的对象,或者block经过copy之后,都会被转移到堆上面,堆是向上增长的
  • 栈区(stack): iOS定义的方法和函数都是在栈上工作,栈是从高地址到低地址进行扩展,所以说栈是向下扩展

不同内存段分别代表的详细含义:

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