美文网首页
ios开发中的内存与分区

ios开发中的内存与分区

作者: 艾欧艾斯ios | 来源:发表于2016-10-09 10:52 被阅读0次

    一、RAM & ROM存储器

    RAM(random access memory):
    运行内存,读写速度非常快,无法掉电存储。
    ROM(read only memory):
    存储性内存,可以掉电存储,例如SD卡、Flash(机械磁盘也可以简单的理解为ROM)。
    由于RAM类型不具备掉电存储能力(即一停止供电数据全没了,重新上电后全是乱码,所以需要初始化),所以app程序一般存放于ROM中。RAM的访问速度要远高于ROM,价格也要高。由于RAM不能掉电存储,所以我们的APP程序,刷机包,下载的文件等等,都是在ROM里面存储的。手机里面使用的ROM基本都是NandFlash,CPU是不能直接访问的,而是需要文件系统/驱动程序(嵌入式中的EMC)将其读到RAM里面,CPU才可以访问。另外,RAM的速度也比NandFlash快。

    二、RAM分区

    栈区(stack):

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

    堆区(heap):

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

    全局区(静态区 static):

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

    常量区:

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

    代码区:

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

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

    文章转自作者 Fan_人 简书

    相关文章

      网友评论

          本文标题:ios开发中的内存与分区

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