美文网首页iOS
内存简单介绍

内存简单介绍

作者: DockeriOS | 来源:发表于2019-03-13 16:08 被阅读0次

初步介绍

1.栈区

栈区(stack)由编译器自动分配并释放,存放的是函数的参数值,局部变量等,方法调用的实参也是保存在栈区的。

栈是系统数据结构,对应线程/进程是唯一的。优点是快速高效,缺点是有限制,数据不灵活。由编译器自动分配释放。主要存放一些基本类型的变量和对象引用类型。

2.堆区

由程序员分配和释放,如果程序员不释放,可能会出现内存泄露,程序结束的时候,可能会由操作系统回收,

比如iOS中alloc都是存放在堆中,优点是灵活方便,数据适应面广泛,但是效率有一定降低,堆空间的分配总是动态的,不同堆分配的内存无法互相操作。虽然程序结束的时候所有的数据空间都会被释放回系统,但是精确的申请内存,释放内存匹配是良好程序的基本要素。主要存放用new构造的对象和数组。

3.全局区(静态区)

全局变量和静态变量是放在一起的,初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域,程序结束后由系统释放。

注意:全局区又可分为未初始化全局区:.bss段
     初始化全局区:data段。
     
举例:int a;为初始化的 int a = 10 ;已初始化的。

4.文字常量区

存放常量字符串,程序结束后由系统释放。

5.代码区

存放函数的二进制代码。

大致如图所示

avatar avatar
int a = 0; //全局初始化区
char *p1; //全局未初始化区

void main()  {
int b; //栈
char s[] = "abc"; //栈
char *p2;  //栈
char *p3 = "123456";   / /123456{post.content}在常量区,p3在栈上
static int c = 0;  //全局(静态)初始化区

p1 = (char *)malloc(10);  //分配得来得10字节的区域在堆区
p2 = (char *)malloc(20); //分配得来得20字节的区域在堆区

strcpy(p1, "123456");   //123456{post.content}放在常量区,编译器可能会将它与p3所指向的"123456"优化成一块
}
int main(int argc, const char * argv[]) {

    // 局部变量是保存在栈区的
    // 栈区变量出了作用域之后,就会被销毁
    NSInteger i = 10;

    NSLog(@"%zd", i);

    // 局部变量是保存在栈区的
    // 赋值语句右侧,使用 new 方法创建的对象是保存在堆区的
    // xinge 变量中,记录的是堆区的地址
    // 在 OC 中,有一个内存管理机制,叫做 `ARC`,可以自动管理 OC 代码创建对象的生命周期
    // 因此,在开发 OC 程序的时候,程序员通常不需要考虑内存释放的工作
    LJXPerson *xinge = [LJXPerson new];
    NSLog(@"%@", xinge);
    return 0;
}

相关文章

  • 内存简单介绍

    初步介绍 1.栈区 栈区(stack)由编译器自动分配并释放,存放的是函数的参数值,局部变量等,方法调用的实参也是...

  • Java基础之内存模型

    Java基础之内存模型 目录 Java内存模型简单介绍 JVM介绍 存储方式 并发原因 Java内存模型与系统内存...

  • iOS 内存简单介绍

    iOS内存管理 iOS内存分为5个区:栈区,堆区,全局区,常量区,代码区 栈区stack:这一块区域系统会自己管理...

  • RxLifeCycle

    介绍 在 内存泄漏 中介绍了使用 Disposable 来避免内存泄漏。但这个简单的方法需要重载 onDestor...

  • Shader- Compute Shaders(转)

    首先简单介绍GPGPU programming 和CPU Random Memory Accesses(随机内存获...

  • Android内存泄漏的介绍

    我们app性能优化主要涉及到内存优化,电量优化,View的优化。这里对内存优化里的内存泄漏做一个简单的介绍。 一、...

  • Dispatch I/O 本地读取

    1.Dispatch I/O 简单介绍 在《iOS和OSX多线程和内存管理》上看到Dispatch I/O的介绍,...

  • 冷月手撕408之操作系统(12)-内存管理基础知识

    本节主要是讲操作系统的内存管理基础知识,首先简单介绍了内存是什么。内存管理的功能,将作为以下几个我们讲解的重点。 ...

  • iOS 内存管理

    在介绍内存管理之前,先来简单了解一下内存中的堆和栈。 栈 当程序执行某个方法时,会从栈中分配一块内存空间,这块内存...

  • 内存介绍

    虚拟内存总体分五大区域,栈区(堆栈),堆区(托管堆),常量,静态(静态未初始化区,和静态初始化区)其他区域**栈区...

网友评论

    本文标题:内存简单介绍

    本文链接:https://www.haomeiwen.com/subject/maltmqtx.html