ios 内存五大区

1、堆(heap)区

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

1)不连续的内存区域

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

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

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

优点

灵活方便,随取随用

缺点:

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

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

栈(stack)区

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

特点

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

2)遵循先进后出的原则

3)向低地址的数据结构

优点

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

缺点

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

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

全局(静态)区

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

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

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

常量区

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

代码区

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

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

相关阅读更多精彩内容

  • 在iOS中,内存主要分为 栈区、堆区、全局区、常量区、代码区 五大区域。如下图所示 下面分别介绍这五大区 栈区(S...
    恍然如梦_b700阅读 751评论 0 2
  • 1.介绍 在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域,如下图所示: 2. 栈区 2.1 介...
    NJKNJK阅读 421评论 0 0
  • 在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域。如下图所示 下面分别介绍这五大区 栈区(Sta...
    辉辉岁月阅读 1,037评论 0 1
  • 前言: 在iOS开发中,平常大家都会说,堆区,栈区,都是存在虚拟内存。 虚拟内存五大区:堆区、栈区、全局区、常量区...
    浅墨入画阅读 681评论 0 2
  • 在 iOS 开发中,内存主要分为堆区、栈区、全局区、常量区、代码区五大区域 堆(heap)区 是有程序员分配和释放...
    远方竹叶阅读 2,383评论 1 11

友情链接更多精彩内容