美文网首页
ios 内存五大区

ios 内存五大区

作者: 星空WU | 来源:发表于2021-03-14 14:13 被阅读0次

    1、堆(heap)区

    是有程序员分配和释放,用于存放运行中被动态分配的内存段。大小不定,可增加和缩减。

    1)不连续的内存区域

    2)向高地址扩展的数据结构

    3)遵循先进先出(FIFO)原则

    OC 程序中使用 alloc、new 创建的对象、C 语言中使用 malloc、 calloc、realloc 分配的空间是在堆上,需要手动释放或者由垃圾回收机制来回收。

    优点

    灵活方便,随取随用

    缺点:

        需要手动管理,效率低,容易产生内存碎片。

        访问堆中的内存时,一般需要先通过对象读取到栈区的指针地址,然后通过指针地址访问堆区。

    栈(stack)区

    栈是由编译器分配和释放,用于存放程序临时创建的变量、函数的参数、局部变量等。

    特点

    1)是一块连续的内存区域

    2)遵循先进后出的原则

    3)向低地址的数据结构

    优点

    栈是由编译器分配和释放,不会产生内存碎片,快速高效

    缺点

    内存大小有限制(iOS 主线程、其他线程以及 Mac)相关说明在 Stack space 查阅

    由于函数运行而临时占用的内存区域

    全局(静态)区

    全局区是编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。static 修饰的变量始终保存到常量区。

    数据区:用来存放可执行文件中已经初始化的全局变量,也就是用来存放静态分配的变量和全局变量(.data)

    BSS区:包含了程序中未初始化的全局变量。

    常量区

    是编译时分配的内存空间,在程序结束后由系统释放。存放的是常量,是一块特殊的区域。

    代码区

    用来存放函数的二进制代码,它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,只允许读操作,不允许写操作

    相关文章

      网友评论

          本文标题:ios 内存五大区

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