首页 > 移动平台 > 详细

iOS 中内存分区

时间:2015-04-09 00:40:57      阅读:1824      评论:0      收藏:0      [点我收藏+]

1  关于RAM ROM

    我们知道,内存为RAM类型不具备掉电存储能力(即一掉电数据全没了),所以app程序一般存放于内存卡(Flash)或ROM中。RAM的访问速度要远高内存卡(Flash)或ROM。

2  当启动一个app

    为了加快程序执行速度,系统会把开启的那个app程序从Flash或ROM里面拷贝到内存(RAM),然后从内存里面执行代码。另一个原因是CPU不能直接从内存卡里面读取指令(需要Flash驱动等等)。

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

    1)、栈区(stack)— 这个一般由编译器操作,会存一些局部变量,函数跳转地址,现场保护等等

    2)、堆区(heap) — 一般由程序员管理,比如alloc申请内存

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

    4)、常量区—常量字符串就是放在这里的

    5)、代码区—存放代码,即第2中的app程序会拷贝到这里。

4  编程注意

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

如下图所示:代码区存放于低地址,栈区存放于高地址。

技术分享

iOS 中内存分区

原文:http://www.cnblogs.com/mddblog/p/4405165.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!