面试好文

浅谈iOS内存几大区域

2019-10-18  本文已影响0人  最强的小强
一、什么是内存

内存是与CPU直接交换数据的内部存储器。它可以随时读写,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储介质。

二、iOS内存存放的几大区域
  1. 栈区(stack)
    由编译器自动分配并释放,存放函数的参数值,局部变量等。也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量)
    栈是系统数据结构,对应线程/进程是唯一的。优点是快速高效,缺点时有限制,数据不灵活。
// 举例
- (void)test {
     int a= 10;
}
  1. 堆区(heap)
    由程序员手动分配和释放,OC一般通过new方法创建对象 ,一般由程序员分配释放,若程序员不释放,程序结束时,可能由OS回收 。(MRC和ARC)
// 举例
NSObject *obj = [NSObject new];
  1. 全局区(static静态区)
    存放未初始化的全局变量和静态变量, 程序结束后由系统释放。
// 举例
int a;
NSString *str;
static int c = 10;
  1. 文字常量区
    存放已经初始化的常量字符串,程序结束后由系统释放。
// 举例
NSString *str = @"Hello world";
  1. 代码区
    存放函数的二进制代码
三、全部代码
int a; // 全局区
NSString *b; // 全局区
static int  c = 100;  // 全局区
- (void)test {
    int d = 100; // 栈区
    NSObject *obj = [[NSObject alloc]init]; //堆区
    NSString *str = @"123";//常量区
}

写在最后,如果大家有不同的意见,欢迎在评论区评论。

上一篇 下一篇

猜你喜欢

热点阅读