内存分配

分区及职责

  1. 栈区(stack):存放局部变量和方法实参。

  2. 堆区(heap):存放OC中使用new等方法创建的对象。

  3. 全局(静态)区:包括以下两个分区:

1
2
3.1. 数据段(Data segment):初始化的全局变量和静态变量。
3.2. BSS段:未初始化的全局变量和静态变量。
  1. 常量区(数据段):const、@”x”常量字符串

  2. 代码段(Text segment):程序的代码(ELF)。

分配&释放?

  • 栈区:由编译器自动分配和释放。
  • 堆区:由程序员申请和释放,不释放会泄漏。
  • BSS段\数据段\常量区\代码段:程序结束后由系统释放。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int age = 24;  //全局初始化区(数据段)
NSString *name;//全局未初始化区(BSS段)
static NSString *sName = @"Dav";//全局(静态初始化)区

@implementation AppDelegate

-(BOOL)application:(UIApplication *)application
willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
int aInt;//栈
NSString *aName = @"Dav"; //Dav在常量区,对象aName的指针存储在栈区。
//对象aArr的指针在栈区,分配而来的8字节的区域在堆区,aArr的指针指向堆区的地址。
NSMutableArray *aArr = [NSMutableArray arrayWithCapacity:1];
return YES;
}

- (NSInteger)mathAddParam1:(NSInteger)num1 Param2:(NSInteger)num2
{
return num1 + num2; //num1和num2 在栈区
}
@end

内存分配
https://davidlii.cn/2018/07/30/memory.html
作者
Davidli
发布于
2018年7月30日
许可协议