内存五大分区

按照内存地址从高(0xffffffff)到低(0x00000000)的顺序排列,可分为5大分区:栈区 -> 堆区 -> 全局静态区 -> 常量区 -> 代码区。大致分布如下图所示👇

  1. 栈区
    • 栈区的内存空间由系统管理 --> 即方法调用开始时开辟空间,方法调用结束时回收空间。
    • 栈区是从高地址低地址扩展,是一块连续的内存区域,遵循先进后出,后进先出(FILO)原则,使用效率高。
    • 栈区的内存空间是在运行时由系统进行分配。
    • 哪些变量是栈区的?例如方法的入参,内部定义的局部变量等,都存放在栈区
  2. 堆区
    • 最大的特点 --> 空间大,需程序员自己手动管理。(当然,在ARC时代也是系统自动管理的)
    • 堆区是从低地址高地址扩展,与栈区相反,遵循先进先出(FIFO)的原则。
    • 堆区由系统api开辟空间(c/c++ --> malloc、calloc、realloc, oc --> alloc new),这个空间可以是不连续的,以链表结构存在,
    • 开辟出的空间的首地址是在栈区,例如LGPerson *person = [[LGPerson alloc] init];这个person指向所指向的地址是在栈区
    • 内存回收 --> free回收,做了两件事,一是释放堆区的内存,二是将栈区的指针置为nil。
  3. 全局静态区
    • 存放全局变量静态变量
    • 内存空间也是由系统管理 -->程序启动开辟程序结束回收,程序执行期间一直存在
    • static修饰的变量仅执行一次,生命周期为整个程序运行期
  4. 常量区
    • 存放常量👇(整型、字符型,浮点型,字符串等),整个程序运行期不能被改变
      • 已初始化全局变量
      • 已初始化静态变量
    • 空间由系统管理,生命周期为整个程序运行期
  5. 代码区
    • 存放程序执行的CPU指令,一种二进制文件。(编译期将代码转换为CPU指令)

补充概念

  1. 内存泄漏(memory leak):是指申请的内存空间使用完毕之后未回收
    一次内存泄露危害可以忽略,但若一直泄漏,无论有多少内存,迟早都会被占用光,最终导致程序crash。(因此,开发中我们要尽量避免内存泄漏的出现)
  2. 内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用。
    通俗理解就是内存不够用了,通常在运行大型应用或游戏时,应用或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。最终导致机器重启或者程序crash

简单来说:

概念 区别说明
内存泄漏 供应方(操作系统)能提供给需求方(App)的内存越来越少。
内存溢出 需求方(App)需要的内存过大,超过供应方(操作系统)负载。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 1. 栈区 定义 栈是系统数据结构,其对应的进程...
    北京_小海阅读 2,637评论 0 6
  • C/C++中内存分5大区:栈,堆,全局/静态存储区,常量存储区,代码区(也称自由存储区)。 代码区:毫无疑问是用来...
    忻恆阅读 3,506评论 0 1
  • 1.bss段( bss segment ) bss段通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区...
    dozening007阅读 5,295评论 2 5
  • 关于iOS内存的五大分区 1.bss段( bss segment ) bss段通常是指用来存放程序中未初始化的全局...
    7_c5dc阅读 611评论 0 1
  • BSS段:BSS段( bss segment )通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。...
    Mr_Baymax阅读 1,022评论 2 0