美文网首页
IOS底层原理-内存五大区域

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

作者: lkm_0bdc | 来源:发表于2020-11-01 23:43 被阅读0次
借用月月的图.png

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

栈区

  • 局部变量和方法实参

栈区特点:

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

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

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

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

堆区

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

堆区特点:

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

静态区

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

常量区

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

代码段

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

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

  • 局部变量是保存在栈区的
  • 方法调用的实参也是保存在栈区的
    堆区 (heap [hiːp]): 由程序员分配释放,若程序员不释放,会出现内存泄漏
  • 赋值语句右侧 使用 new 方法创建的对象
  • 被创建对象的所有 成员变量
    BSS 段 : 程序结束后由系统释放
    数据段 : 程序结束后由系统释放
    代码段:程序结束后由系统释放
  • 程序 编译链接 后的二进制可执行代码

相关文章

网友评论

      本文标题:IOS底层原理-内存五大区域

      本文链接:https://www.haomeiwen.com/subject/gqkpvktx.html