iOS开发中的内存分配与分区

出处:电子产品世界 发布于:2018-08-09 13:53:32

  关于RAMROM

  RAM与ROM就是具体的存储空间,统称为存储器

  RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储。它又分为:

  动态DRAM,速度慢一点,需要定期的刷新(充电),我们常说的内存条就是指它,价格会稍低一点,手机中的运行内存也是指它。

  静态SRAM,速度快,我们常说的缓存,二级缓存就是指它,当然价格高一点。

  ROM(read only  memory):存储性内存,可以掉电存储,例如SD卡、Flash(机械磁盘也可以简单的理解为ROM)。用的多的:NandFlash,还有NorFlash,现在用的已经比较少了(两者主要区别是前者空间大,便宜,后者可以直接运行程序,读取速度快)。

  由于RAM类型不具备掉电存储能力(即一停止供电数据全没了,从新上电后全是乱码,所以需要初始化),所以app程序一般存放于ROM中。RAM的访问速度要远高于ROM,价格也要高。

  RAM与ROM协同工作

  由于RAM不能掉电存储,所以我们的APP程序,刷机包,的文件等等,都是在ROM里面存储的。

  手机里面使用的ROM基本都是NandFlash,CPU是不能直接访问的,而是需要文件系统/驱动程序(嵌入式中的EMC)将其读到RAM里面,CPU才可以访问。另外,RAM的速度也比NandFlash快。

  内存分区:可以分为5个区

  说到内存分区,内存即指的是RAM。

  栈区(stack):  这个一般由编译器操作,或者说是系统管理,会存一些局部变量,函数跳转跳转时现场保护(寄存器值保存于恢复),这些系统都会帮我们自动实现,无需我们干预。  所以大量的局部变量,深递归,函数循环调用都可能耗尽栈内存而造成程序崩溃 。

  堆区(heap): 一般由程序员管理,比如alloc申请内存,free释放内存。我们创建的对象也都放在这里。

  全局区(静态区 static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。注意:在嵌入式系统中全局区又可分为未初始化全局区:.bss段和初始化全局区:data段。举例:int  a;未初始化的。int a = 10;已初始化的。

  常量区:常量字符串就是放在这里的,还有const常量。

  代码区:存放代码,app程序会拷贝到这里,程序不是在ROM里面存储吗?看下面的举例

  memZonepic01.png

  程序运行举例(CPU RAM ROM之间协同)

  首先了解下:虚拟内存与物理内存。

  手机上的所有程序都是依托操作系统,运行在虚拟内存上的,每一个APP都会以为自己拥有所有的虚拟内存。比如一个手机,它是32位操作系统(一般也是32位总线),真实的物理内存为2G,那么他的寻址空间为4G(2的32次方),对于APP来说,它觉得自己拥有4G的内存,虽然这是不可能的(或者说同一时间是不可能的),但是,操作系统只要保证APP当时用到的地址空间有真实的物理地址对应就可以,APP也不需要知道那对应的2G真实物理内存具体在哪里。不要求4G的虚拟内存同一时间都有真实的物理内存相对应,当然那也是不可能的,因为只有2G物理内存。

  在下面的举例中,只考虑虚拟内存

  当我们点击手机屏幕APP的Icon启动一个APP(例如微信)时,操作系统会为微信开辟4G的虚拟内存空间(开辟真实的物理内存,对应一部分到4G的虚拟内存),操作系统会把存储在ROM里面微信的部分代码(受空间所限,不可能全部拷贝),拷贝到上一步开辟的4G内存空间的代码区,如上图,然后CPU就可以访问RAM来运行微信的程序了  。

  假设通过微信我们了一个100M的视频,那么会从服务器一点一点的到RAM,然后再从RAM写到ROM存储。这样才能保证,我们关掉微信并再次打开时视频还在。假设隔一段时间,我们要看视频,程序会将它从ROM读到RAM然后解码播放。

  当一个app启动后,代码区,常量区,全局区地址已固定,因此指向这些区的指针不会为空而产生崩溃性的错误。而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃(编程中很常见)。


版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!