OC进化iOS开发 技术集锦iOS学习笔记

iOS 程序(APP)运行中的内存分配

2017-06-19  本文已影响736人  boundlessocean

在描述内存分配之前,我们需要搞懂两个东西,RAMROM

一、存储器

看一下CPURAMROM之间的关系图

CPU、RAM、ROM.png
二、程序(App)启动运行

App安装到手机后,存储在 ROM中,程序启动后,系统会把App程序从ROM里面拷贝到RAM,然后从RAM里面执行代码。

三、RAM内存分布

RAM内存中分5个区

image.png
#import "ViewController.h"
@interface ViewController ()
@end

NSInteger a = 10;  //全局初始化区
NSArray *array;    //全局未初始化区

@implementation ViewController

- (void)viewDidLoad {
    
    //UIView *subView 指针存在栈区, [[UIView alloc] init] 对象保存在堆区
    UIView *subView = [[UIView alloc] init];
    NSString *string = @"8888";  // string存在栈上, @"8888" 在常量区。
    static NSInteger count = 0;  // 全局(静态)初始化区, 0 在常量区

}
@end
四、注意事项:

1.栈区中的变量由编译器负责分配和释放,内存随着函数的运行分配,随着函数的结束而释放,由系统自动完成。只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出

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

上一篇 下一篇

猜你喜欢

热点阅读