02-iOS内存5大区域

栈区

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

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

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

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

堆区

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

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

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

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

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

全局/静态区

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

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

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

常量区

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

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

代码区

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ios内存五大区域 栈区函数内部的局部变量,传进来的参数的指针都是放在栈区的,栈区的内存空间由系统管理,它是一段连...
    浪的出名阅读 2,726评论 0 1
  • 在iOS开发中经常会涉及到内存,内存主要分为五个区:栈区、堆区、全局区、常量区、代码区 栈区(stack) 栈是由...
    Irino阅读 1,085评论 0 1
  • iOS设备中,内存被人为的分成5大区域:栈区、堆区、全局/静态区、常量区、代码区,所占内存都为系统分配的虚拟内存。...
    Henry________阅读 3,931评论 1 4
  • 1.栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯...
    鼬殿阅读 5,190评论 0 1
  • 一、几大内存区域介绍 内存主要分为栈区、堆区、全局区、文字常量区、代码区等五大区域。如图所示,代码区存放于低地址段...
    焚雪残阳阅读 1,873评论 0 2

友情链接更多精彩内容