美文网首页
02-iOS内存5大区域

02-iOS内存5大区域

作者: jensen1in | 来源:发表于2022-07-21 20:23 被阅读0次

栈区

    栈是一块连续的内存区域从从高地址向低地址进行存储,遵循先进后出(FILO)原则。

    栈的地址空间在 iOS 中是以0X7开头。

    栈区一般在运行时分配,内存空间由系统管理,申明的变量过了作用域范围后内存便会自动释放。

    函数内部定义的局部变量、方法的参数(方法中默认参数:self、cmd),都存放在栈区

堆区

    堆是不连续的内存区域从从低地址向高地址进行存储,,类似于链表结构(便于增删,不便于查询),遵循先进先出(FIFO)原则。

    堆的地址空间在iOS中是以0x6开头,其空间的分配总是动态的。

    开发人员需要关注变量的生命周期,如果不及时释放,会造成内存泄漏,只有等程序结束时由系统统一回收。

    OC中使用alloc或者new开辟空间创建对象。

    C语言中使用malloc、calloc、realloc分配的空间,需要free释放。

全局/静态区

    该区是编译时分配的内存空间,在iOS中一般以0x1开头,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。

    未初始化的全局变量和静态变量,即BSS区(.bss)。

    已初始化的全局变量和静态变量,即数据区(.data)。

常量区

    该区是编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。

    存放常量:整型、字符型、浮点、字符串等。

代码区

    该区是编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。

    程序运行时的代码会被编译成二进制,存进内存的代码区域。

    类加载:当某个类第一次被访问(创建对象或者声明类的指针变量)的时候,会把这个类储存在代码区,这个过程就是类加载

相关文章

  • 02-iOS内存5大区域

    栈区 栈是一块连续的内存区域从从高地址向低地址进行存储,遵循先进后出(FILO)原则。 栈的地址空间在 iOS 中...

  • 理解Java内存区域与垃圾收集器

    本文主要介绍java内存区域和GC回收 java内存区域 垃圾收集器 参考 java内存区域 运行时内存区域 ja...

  • java基础知识

    java 内存区域、JMM、JAVA线程模型、硬件内存模型 java内存区域分为共享区域(堆、方法区常量池)、私有...

  • JVM GC机制总结

    0. JVM内存组成 JVM内存主要由两部分组成:a.线程私有内存区域;b.线程公共内存区域。 线程公用的内存区域...

  • 内存区域

    1.栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯...

  • 内存

    内存的几大区域 栈内存和堆内存 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对...

  • iOS备战之内存管理(一)

    iOS备战之内存管理(一) 内存布局 下面的图表示一个内存区域,内存区域从低到高分配依次为:预留区域、代码段、已初...

  • Java内存区域与内存溢出异常

    JVM——Java内存区域 链接:Java内存区域[https://segmentfault.com/a/1190...

  • 内存管理:内存布局,内存几大区域

    内存布局,内存几大区域

  • JAVA内存区域与内存溢出异常

    JAVA内存区域与内存溢出异常 一 Java内存区域 Java虚拟机在执行java程序的...

网友评论

      本文标题:02-iOS内存5大区域

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