【总结】- 另一个角度看内存

目录

概述

文章概述

之前写过一篇文章,曾经对OC中的内存管理进行过总结。OC内存管理
这篇文章希望以计算机内存为线索,将C及OC的部分知识点进行串联式复习总结
嗯哪,我们开始吧~

内存概述

计算机内存分为五大区域:
1. 栈区(存放局部变量,由编译器自动释放–如代码块结束、程序结束等)
2. 堆区(存放对象,有程序员手动释放)
3. 全局区/静态区(存放全局变量和静态变量,初始化的全局、静态变量存放在一块内存中,未初始化的存放在另一块内存中)
4. 文字常量区(存放常量,程序结束后自动释放)
5. 程序代码区(存放二进制代码,程序结束自动释放)

内存

栈区与堆区的对比

  1. 栈区存放的是非对象类数据,如:指针、结构体、c数组、int;堆区存放的是对象类数据,需要申请内存分配的
  2. 栈区内存较小(M为单位),与堆区内存(G为单位)远不在一个数量级上
  3. 栈区又编译器管理,堆区由程序员手动管理(容易出现内存溢出)
  4. 读取速度栈比堆快
  5. 堆的生长方向向上,向着内存地址增加的方向;栈的生长方向向下,向着内存地址减小的方向
  6. 碎片问题:栈是先进后出,不会产生碎片;堆是先进先出,会产生碎片

一句代码可能既使用了栈区,也使用了堆区

NSArray *array = [NSArray arrayWithObject:@”哒哒哒”]

指针array存放在栈区,字符串对象和数组对象存放在堆区

全局区/静态区与static关键字

static关键字修饰的变量,均置于全局区中。若被static修饰的变量定义在函数体内,则该变量仅能在该函数体内使用;若在函数体外,则表示该变量仅在该文件中能使用。

栈区内存存放方式

栈区内存从未被使用的大内存地址开始,向小内存地址方向寻址,并从小内存地址开始依次排布数据(如:c数组)。以变量区域中最小的内存地址,作为整个变量的内存地址(被指针所指向)

关于SEL和程序代码区…

暂未弄明白他们之间的关系,嘿嘿~ 等徐某学了汇编之后,再来解答这个问题咯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值