安路的技术博客

Nothing in life is to be feared. It is only to be understood

IOS中的内存分配

| Comments

内存分配可以分为5个区

栈区(stack)

这个一般由编译器操作,或者说是系统管理,会存一些局部变量,这些系统都会帮我们自动实现,无需我们干预,所以大量的局部变量,深递归,函数循环调用都可以耗尽栈内存而程序崩溃

堆区(heap)

一般由程序员管理,比如alloc申请内存,free释放内存,我们创建的对象也都放在这里

全局区(静态区 static)

全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。

常量区

常量字符串就是放在这里的,还有const常量

代码区

存放代码,app程序会拷贝到这里,程序不是在

1

图中各个区并不连续

当一个app启动后,代码区,常量区,全局区地址已经固定,因此指向这些区的指针不会为空而产生崩溃性的错误,而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入和弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃

Comments