美文网首页
iOS内存管理-内存五大区

iOS内存管理-内存五大区

作者: 十年开发初学者 | 来源:发表于2021-09-09 11:30 被阅读0次

在iOS中内存主要分为五大区域:栈区、堆区、静态区、常量区、代码段


image.png

栈区

  • 一段连续的内存区域,从高地址向低地址存储,遵循先进后出(FILO)原则。
  • x86架构下,栈的地址一般为0X7开头
  • 一般在运行时进行分配,内存空间由系统管理,变量过了作用域范围后内存便会自动释放。
  • 参数、函数、局部变量都放在栈区
  • 参数入栈从前往后入栈。而结构体入栈从后往前入栈

堆区

  • 不连续的内存低地址向高地址存储,遵循先进先出(FIFO)原则。
  • 堆的地址空间iOSx86架构下以0X6开头,空间的分配是动态的
  • 需要关注变量的生命周期,不及时释放会造成内存泄露
  • OC中使用alloc、new开辟空间创建的对象内存放在堆区(而指向内存的指针还是在栈里)
  • C语言中使用malloc、calloc、realloc分配的空间,需要free释放。

栈区与堆区对比

  • 栈是一段连续的内存区域,堆是不连续的内存
  • 系统自动回收内存,堆需要开发人员手动释放
  • 内存大小有限制,内存空间小,堆内存空间大

栈区与堆区相关面试体

为什么将开辟的空间放入堆区

【答】因为栈区内存比较少,而堆区内存比较大

栈区的内存如何去定位

【答】通过sp寄存器直接定位

堆区内存如何定位

【答】通过sp寄存器来定位到栈内存地址,通过该地址定位堆内存地址,所以说栈定位比堆定位速度快

全局静态区

  • 该区是编译时分配的内存空间,在iOS中一般以0x1开头,程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。
  • 未初始化的全局变量和静态变量,在BSS区,即未初始化区,.bss
  • 已初始化的全局变量和静态变量,在数据区,即初始化区,.data

常量区

  • 该区是编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。
  • 存放常量:整型、字符型、浮点、字符串等。

代码区

  • 该区是编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。
  • 程序运行时的代码会被编译成二进制,存进内存的代码区域。

相关文章

  • iOS 内存管理--弱引用和强引用

    前言 前面我们已经学习了几篇iOS内存相关的内容,分别如下: iOS 内存管理--内存五大区、TiggedPoin...

  • iOS Objective-C 内存管理简介

    iOS Objective-C 内存管理 [TOC] 在iOS开发中我们常说内存有五大区,那么都是哪五大区呢?在i...

  • iOS开发 内存管理

    一、内存五大区 二、内存管理方案 iOS操作系统是针对不同场景,会提供不同的内存管理方案, TaggedPoint...

  • 内存五大区

    iOS内存五大区 在iOS中,内存主要分为 五大区域。如下图所示 下面分别介绍这五大区 *栈区 stack 定义...

  • iOS 内存管理(一)-分区及引用计数

    一、内存管理五大区 在iOS中内存主要分为五大区域:栈区、堆区、静态区、常量区、代码段。 1.栈区 栈区是一段连续...

  • 内存管理面试题

    讲一下 iOS 内存管理的理解 讲一下 iOS 内存管理的理解实现原理 内存中的5大区分别是什么? ARC 的 r...

  • iOS内存五大区

    iOS内存五大区 在iOS中,内存主要分为:栈区、堆区、全局区(静态区)、常量区以及代码区这五大区。本文将对这五大...

  • iOS-底层原理22:内存五大区

    在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域。如下图所示 注意:内存五大区,实际是指虚拟内存...

  • 内存5大区

    iOS程序中的内存分配分为5大区 内存5大区:堆,栈,方法区,全局区,常量区 栈:不需要手动管理内存,会自动清理栈...

  • 内存管理

    使用CADisplayLink、NSTimer有什么注意点? 介绍下内存的几大区域 讲一下你对 iOS 内存管理的...

网友评论

      本文标题:iOS内存管理-内存五大区

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