不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。
下图是iOS系统为一个APP分配的内存,如下:
?...堆区的内存分配使用的是alloc;
堆区的地址是从低到高分配;
ARC原理是基于堆区,编译器在编译的时候给对象自动添加retain,release,autorelease;
在ios中,堆区的内存是应用程序共享的...是由alloc分配的内存,一般速度比较慢,容易产生内存碎片;
栈区不需要程序猿管理内存,由编译器自动分配并释放,速度快;
当一个app启动后,代码区,常量区,全局区大小都是已经固定的,因此指向这些区的指针不会产生崩溃性的错误...,而堆区和栈区是时时刻刻变化的(堆得创建和销毁,栈的弹入和弹出),所以当使用一个指针指向这个2区里面内存的时候,一定要注意内存是否已经被释放,否则会产生程序崩溃(即野指针报错)
iOS的内存管理
这里按照苹果文档所述...不过和Android机比起来,我不得不为苹果的设计称赞,1G空间利用得如此高效,性能不差,也控制了发热。