美文网首页
iOS内存五大分区

iOS内存五大分区

作者: 奉灬孝 | 来源:发表于2020-11-01 18:46 被阅读0次

一、栈区

又称 堆栈 ,由编译器自动分配释放,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}” 中定义的变量(但不包括 static 声明的变量, static 意味着在数据段中存放变量)。除此以外, 在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值 也会被存放回栈中。由于 的后进先出特点,所以 特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把 堆栈 看成一个寄存、交换临时数据的内存区。

是向低地址扩展的数据结构,是一块连续的内存区域

二、堆区

由程序员分配释放,分配方式类似于链表,是向高地址扩展的数据结构,是不连续的内存区域。用于存放进程运行中被动态分配的内存段,堆区的大小并不固定,可动态扩张或缩减。当进程调用 alloc 等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用 realse 释放内存时,被释放的内存从堆中被剔除(堆被缩减)。如果应用程序没有释放掉,操作系统会自动回收。变量通过 new、alloc、malloc、realloc 分配的内存块就存放在堆区。

三、全局/静态区

全局/静态区 是存放全局变量和静态变量的。

已初始化的全局变量和静态变量存放在一块区域。

未初始化的全局变量和静态变量在相邻的另一块区域。

static 修饰的变量会成为静态变量,该变量的内存由全局/静态区在编译阶段完成分配,且仅分配一次。

static 可以修饰局部变量也可以修饰全局变量。

全局/静态区 的内存在编译阶段完成分配,程序运行时会一直存在内存中,只有当程序结束后才会由操作系统释放。

四、常量区

常量区 是一块比较特殊的存储区,常量区里面存放的是常量,常量字符串就存放在常量区。

常量区 的内存在编译阶段完成分配,程序运行时会一直存在内存中,只有当程序结束后才会由操作系统释放。

五、代码区

代码区 是用来存放可执行文件的操作指令(存放函数的二进制代码),其实就是存放程序的所有代码。代码区 需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。

相关文章

  • iOS-归纳

    iOS内存分区,堆区 栈区等 内存管理 属性关键字、内存分区总结 iOS- 数据存储iOS开发数据库-FMDBiO...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • iOS内存管理(一)基础知识

    iOS内存管理 内存分区 这里从低到高介绍一下iOS内存的分区及主要存储内容。 内核区 栈区:函数,方法,局部变量...

  • iOS内存管理(二)alloc、retain、release、d

    iOS内存管理(一)、内存分区和引用计数iOS内存管理(二)alloc、retain、release、deallo...

  • iOS内存管理(一)、内存分区和引用计数

    iOS内存管理(一)、内存分区和引用计数iOS内存管理(二)alloc、retain、release、deallo...

  • ios内存五大分区

    iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 1. 栈区 定义 栈是系统数据结构,其对应的进程...

  • iOS内存五大分区

    一、栈区 又称 堆栈 ,由编译器自动分配释放,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}” 中定...

  • ios内存五大分区

    iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 栈区 定义 栈是系统数据结构,其对应的进程或者线...

  • iOS 内存分区

    iOS中内存分区为五大区:栈区、堆区、静态区、常量区、代码段 栈区 是一段连续的内存区域,由高地址向低地址存储,遵...

  • iOS内存的五大分区

    关于iOS内存的五大分区 1.bss段( bss segment ) bss段通常是指用来存放程序中未初始化的全局...

网友评论

      本文标题:iOS内存五大分区

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