iOS 中内存分区
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启动后,代码区,常量区,全局区大小已固定,因此指向这些区的指针不会产生崩溃性的错误。而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃(编程中很常见)。
如下图所示:代码区存放于低地址,栈区存放于高地址。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。