@IT·互联网程序员

iOS内存分区

2016-05-06  本文已影响187人  Kevin_wzx

1. RAM ROM

RAM:运行内存,不能掉电存储。ROM:存储性内存,可以掉电存储,例如内存卡、Flash。
由于RAM类型不具备掉电存储能力(即一掉电数据消失),所以app程序一般存放于ROM中。RAM的访问速度要远高于ROM,价格也要高。

2. App程序启动

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

3. 内存分区:

由上至下分布是:栈--堆--全局区--常量区--代码区

1.栈区(stack):
存放的局部变量、先进后出、一旦出了作用域就会被销毁;函数跳转地址,现场保护等;
程序猿不需要管理栈区变量的内存;
-栈区地址从高到低分配;
2.堆区(heap):
堆区的内存分配使用的是alloc;
需要程序猿管理内存;
ARC的内存的管理,是编译器再便宜的时候自动添加 retain、release、autorelease;
堆区的地址是从低到高分配)
3.全局区/静态区(static):
包括两个部分:未初始化过 、初始化过;
也就是说,(全局区/静态区)在内存中是放在一起的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域;
eg:int a;未初始化的。int a = 10;已初始化的。
4.常量区:常量字符串就是放在这里;
5.代码区: 存放App代码;

如下图所示:代码区存放于低地址,栈区存放于高地址。区与区之间并不是连续的。


1156719-1d0de5ca1edc35af.png

4.注意事项

5.其它操作系统

上一篇下一篇

猜你喜欢

热点阅读