iOS内存五大区

427 阅读1分钟
下面各个分区地址由高到低,相邻的两个区地址并不连续:


栈区:系统管理内存的分配与释放,基本数据类型、局部变量放在这个区域;
堆区:由程序员管理内存的分配与释放,alloc申请内存,release释放内存,创建的对象放在这个区域;
全局区:全局变量和静态变量(static修饰的)。初始化与未初始化变量分开存放,初始化的全局变量与静态变量放在同一块区域,未初始化的全局变量与静态变量同放在另一块区域。举例:int a;未初始化的。int a = 10;已初始化的。
常量区:存放常量字符串、const常量的区域。
代码区:存放代码的区域。
总结:当app启动后,代码区、常量区、全局区内存地址已固定,内存运行时不会被释放,指向这几个区的指针不会为空,不会产生崩溃,当程序结束是这些区域的内存才会被释放。而栈区、堆区,如果指针指向这两个区域的内存被释放了,因为指针指向了一个不存在的内存地址系统就会崩溃,所有内存在释放的同时指针要置为nil。