iOS内存分配(栈堆)

2017-08-23  本文已影响190人  edison0428

一般而言,手机内存我们分为两大块 RAM 和 ROM
RAM:就是我们说的运行内存,对于大学时期买安卓机尤其是三星的,RAM对于价格有时是个硬伤,因为那时大部分还是1g的,如果2g的可能就贵很多,它不能掉电储存
ROM:储存性储存(比如储存卡,flash),可以掉电储存,比如买手机,比如7p 128G说的就是这个,手机的应用程序,照片,文件,等等全部储存在这里
当你启动手机app的时候,系统会把开启的那个App程序从Flash或ROM里面拷贝到内存(RAM),然后从内存里面执行代码。
另一个原因是CPU不能直接从内存卡里面读取指令(需要Flash驱动等等

栈和堆的对比
首先我们了解下iOS中的内存管理范围
1.在iOS中只有oc对象才需要内存管理
2.非oc对象比如基本数据类型是不需要内存管理的

再说下内存管理的本质
因为:Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,就是release
OC对象存放于堆里面(堆内存要程序员手动回收)
非OC对象一般放在栈里面(栈内存会被系统自动回收)
堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存
如果在非oc对象,比如c语言中alloc了,那么也要自己free

栈:由系统自动分配,速度较快,不会产生内存碎片
堆:是由alloc分配的内存,速度比较慢,而且容易产生内存碎片,不过用起来最方便

借用别人的比喻:打个比喻来说:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大

未初始化的
全局变量: int a
静态变量 :static int  b;
//未初始化的存放一块

全局变量: int c=2;
静态变量 :static int  d=5;
//初始化的放一块
上一篇 下一篇

猜你喜欢

热点阅读