IOS底层原理-内存五大区域
2020-11-01 本文已影响0人
lkm_0bdc

介绍内存的五大区域:栈区,堆区,静态区,常量区,代码段
栈区
- 局部变量和方法实参
栈区特点:
- 存储空间有限 . iphone的栈区大小只有512k(默认) ,非常有限
- 连续性,栈区的地址是连续的
- 地址分配从大到小. 栈区地址按照分配的顺序,由大到小顺序排列
- 访问速度快.
- 系统管理. (栈区的内存由系统管理)
栈的概念: 后进先出/ 先进后出
调用方法时栈区的工作原理
- 开启栈帧
- 保存实参
- 保存局部变量
- 方法完成后弹栈,销毁栈帧,释放空间
堆区
- OC中使用new方法创建的对象,被创建对象的所有成员变量保存在堆区中
- 程序员手动申请空间
堆区特点:
- 所有程序共享
- 存储大数据
- 程序员管理: 堆区的内存需要程序员管理
- 不连续: 堆区的地址是不连续的
- 速度没有栈区快: 堆区的访问速度没有栈区快,因为我们要访问堆区中创建对象的属性, 必须先需要通过变量找到栈区的地址,再通过地址定位到到堆区中的某一个位置, 只有找个这个位置之后,我们才可以访问到存储到这个对象中属性对应的数值.由于有了 这个地址寻找的过程,所有速度没有栈区的快.
静态区
- 也叫BSS段
- 未被初始化的全局变量和静态变量
- 全局变量和静态变量,不管有没有被初始化,都存放在BSS段中
常量区
- 也叫数据段
- 存储已经初始化的全局变量,静态变量,常量
- 存储常量
代码段
- 代码的二进制文件(用来存储程序的代码/命令)
面试题目:分配和释放
栈区 (stack [stæk]): 由编译器自动分配释放
- 局部变量是保存在栈区的
- 方法调用的实参也是保存在栈区的
堆区 (heap [hiːp]): 由程序员分配释放,若程序员不释放,会出现内存泄漏- 赋值语句右侧 使用 new 方法创建的对象
- 被创建对象的所有 成员变量
BSS 段 : 程序结束后由系统释放
数据段 : 程序结束后由系统释放
代码段:程序结束后由系统释放- 程序 编译链接 后的二进制可执行代码