浅谈iOS内存几大区域
2019-10-18 本文已影响0人
最强的小强
一、什么是内存
内存是与CPU直接交换数据的内部存储器。它可以随时读写,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储介质。
二、iOS内存存放的几大区域
- 栈区(stack)
由编译器自动分配并释放,存放函数的参数值,局部变量
等。也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量)
栈是系统数据结构,对应线程/进程是唯一的。优点是快速高效,缺点时有限制,数据不灵活。
// 举例
- (void)test {
int a= 10;
}
- 堆区(heap)
由程序员手动分配和释放,OC一般通过new方法创建对象 ,一般由程序员分配释放,若程序员不释放,程序结束时,可能由OS回收 。(MRC和ARC)
// 举例
NSObject *obj = [NSObject new];
- 全局区(static静态区)
存放未初始化的全局变量和静态变量
, 程序结束后由系统释放。
// 举例
int a;
NSString *str;
static int c = 10;
- 文字常量区
存放已经初始化的常量字符串
,程序结束后由系统释放。
// 举例
NSString *str = @"Hello world";
- 代码区
存放函数的二进制代码
三、全部代码
int a; // 全局区
NSString *b; // 全局区
static int c = 100; // 全局区
- (void)test {
int d = 100; // 栈区
NSObject *obj = [[NSObject alloc]init]; //堆区
NSString *str = @"123";//常量区
}
写在最后,如果大家有不同的意见,欢迎在评论区评论。