IOS底层原理-内存五大区域

借用月月的图.png

介绍内存的五大区域:栈区,堆区,静态区,常量区,代码段

栈区

  • 局部变量和方法实参

栈区特点:

  • 存储空间有限 . iphone的栈区大小只有512k(默认) ,非常有限
  • 连续性,栈区的地址是连续的
  • 地址分配从大到小. 栈区地址按照分配的顺序,由大到小顺序排列
  • 访问速度快.
  • 系统管理. (栈区的内存由系统管理)

栈的概念: 后进先出/ 先进后出

调用方法时栈区的工作原理

  • 开启栈帧
  • 保存实参
  • 保存局部变量
  • 方法完成后弹栈,销毁栈帧,释放空间

堆区

  • OC中使用new方法创建的对象,被创建对象的所有成员变量保存在堆区中
  • 程序员手动申请空间

堆区特点:

  • 所有程序共享
  • 存储大数据
  • 程序员管理: 堆区的内存需要程序员管理
  • 不连续: 堆区的地址是不连续的
  • 速度没有栈区快: 堆区的访问速度没有栈区快,因为我们要访问堆区中创建对象的属性, 必须先需要通过变量找到栈区的地址,再通过地址定位到到堆区中的某一个位置, 只有找个这个位置之后,我们才可以访问到存储到这个对象中属性对应的数值.由于有了 这个地址寻找的过程,所有速度没有栈区的快.

静态区

  • 也叫BSS段
  • 未被初始化的全局变量和静态变量
  • 全局变量和静态变量,不管有没有被初始化,都存放在BSS段中

常量区

  • 也叫数据段
  • 存储已经初始化的全局变量,静态变量,常量
  • 存储常量

代码段

  • 代码的二进制文件(用来存储程序的代码/命令)

面试题目:分配和释放
栈区 (stack [stæk]): 由编译器自动分配释放

  • 局部变量是保存在栈区的
  • 方法调用的实参也是保存在栈区的
    堆区 (heap [hiːp]): 由程序员分配释放,若程序员不释放,会出现内存泄漏
  • 赋值语句右侧 使用 new 方法创建的对象
  • 被创建对象的所有 成员变量
    BSS 段 : 程序结束后由系统释放
    数据段 : 程序结束后由系统释放
    代码段:程序结束后由系统释放
  • 程序 编译链接 后的二进制可执行代码
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容