【iOS内存管理-内存的几大区域】

前言
iOS内存管理的第一篇章,了解iOS内存的五大分区 。
总览
iOS中,内存主要分为五大区域:栈区,堆区,全局区/静态区,常量区和代码区 。总览图如下 。
如上图所示,代码区是在低地址段存放,而栈区则存放在高地址段,并且各个分区之间不是连续的 。
1. 栈 1.1 介绍1.2 优缺点

【iOS内存管理-内存的几大区域】

文章插图
- (void)testStack {int a = 10;NSLog(@"a == %p size == %lu",&a,sizeof(a));NSLog(@"方法参数 self:%p",&self);NSLog(@"方法参数 cmd:%p",&_cmd);}
2. 堆区
- (void)testHeap {NSObject *object1 = [NSObject new];NSObject *object2 = [NSObject new];NSLog(@"object1 = %@",object1);NSLog(@"object2 = %@",object2);}
栈和堆的区别联系 1. 各自的优缺点?2. 申请后的系统如何响应?3. 申请大小的限制?3. 全局/静态区
其中,全局变量是指变量值可以在运行时被动态修改,而静态变量是修饰的变量,包含静态局部变量和静态全局变量
【iOS内存管理-内存的几大区域】

文章插图
关于关键字之前有学习过深入理解关键字
int clB;static int bssB;int initClB = 10;static int initBssB = 11;- (void)testStatic {NSLog(@"clA = %p", &clB);NSLog(@"bssB = %p", &bssB);NSLog(@"initClB = %p", &initClB);NSLog(@"initBssB = %p", &initBssB);}
clB 和 bssB都是未初始化,在内存是连续的地址,相差为4 。
和 都是初始化的数据,内存地址也是连续的 。
4. 常量区5. 代码区总结
【【iOS内存管理-内存的几大区域】】初步了解了iOS的内存区域,主要是栈和堆的区别和联系需要我们了然于心 。