网易首页 > 网易号 > 正文 申请入驻

程序员的内存里,藏着一摞盘子和一家餐厅

0
分享至

先问一个很基础、但很多人答不上来的问题:int a = 1 和 String s = "hello",这俩变量在内存里住的是不是同一种「房子」?

还真不是。一个住「宿舍」,一个住「宾馆」。程序员的内存从头到尾分两块地盘:栈(Stack)和堆(Heap)。平时听到的空指针、内存泄漏、double free,十个里有九个都出在这两块地盘的交界处。

今天不搬术语,用一摞盘子和一家餐厅,把这事一次讲透。

栈的规矩只有一条:后进先出。最后放上去的盘子最先被拿走,放上去叫 push,拿走叫 pop,而且只允许动最顶上那一个。

它还有个硬性要求:每个数据的大小必须在编译时就定死,后面不能变。i32 固定 4 字节、bool 1 字节、长度 10 的字节数组 10 字节——就像尺寸统一的盘子,才能摞得整整齐齐。

那栈为什么快?因为压根不用找位置。新数据永远放栈顶,所谓分配内存,就是把栈顶指针挪一下,几乎零成本。


栈:一摞盘子,push 放上去,pop 拿走

堆:一家餐厅,先找座再入席

如果数据大小编译时不知道、运行中还会变——比如用户随手输入的字符串、一个不停往里塞元素的列表——栈就伺候不了了,只能请去堆。

堆就像一家餐厅:你进门告诉服务员「我们 4 个人」,这是申请空间;服务员在店里转一圈,找一张坐得下的空桌,这是分配器在搜索空闲内存;桌子标记「已占用」,然后递给你一张号牌:「7 号桌」,这就是指针;朋友晚到了也不用急,报一句「7 号桌在哪」就能找到你们,这就是通过指针访问数据。


堆:一家餐厅,先找空桌,再领号牌

一张表,看懂这对兄弟



速度差主要体现在两个环节。一是分配:栈不用找位置,堆得满店找空桌还要登记在册。二是访问:栈直接拿,堆要多跳一步,而且数据东一块西一块。

别小看「跳来跳去」这事。数据在内存里挨得越近,CPU 缓存命中率就越高,处理就越快——跟服务员点单一个道理:A 桌 A 桌 B 桌 B 桌一路跑下来最省脚程;A 桌 B 桌 A 桌 B 桌来回横跳,时间全耗在路上了。



栈上放不下的内容,靠指针指向堆里的真实数据

调用函数时,参数和局部变量会被压进栈;函数一返回,这一整层整体弹出,自动清理,谁都不用操心。栈上数据的生命周期和函数调用严格绑定,天生不需要人管。



麻烦的是堆。函数结束了,堆上那块内存不会自己消失,于是坑全来了:

  • • 没人管:7 号桌到底算谁的?搞不清就要出错
  • • 重复浪费:同一拨人被安排了三张桌子,内存白白吃掉
  • • 不清理:客人走了桌子一直没收,内存泄漏,最后没座位可用
  • • 收了又坐:桌子收了还有人回去坐,double free / 悬垂指针,程序当场崩给你看



这也是为什么学 Rust 的人都要先被栈和堆「教育」一遍——所有权不是玄学,它就是冲着堆这块没人收拾的地盘去的。

下次再看到「空指针」「内存泄漏」这些词,脑子里可以直接切餐厅画面:要么是桌子没人收,要么是客人回了张已经被收掉的桌子。

你被内存问题坑得最惨的一次是什么?段错误查一整晚,还是泄漏把线上服务撑爆了?评论区聊聊

声明:内容由AI生成

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“你该继续贫困!”女生每天一杯瑞幸被举报,公务员都没这么奢侈

“你该继续贫困!”女生每天一杯瑞幸被举报,公务员都没这么奢侈

番外行
2026-10-05 20:54:27
坚决不许回国!中国3名运动员夺冠后,不承认是国人,下场太解气

坚决不许回国!中国3名运动员夺冠后,不承认是国人,下场太解气

刘哥谈体育
2026-10-08 05:06:24
大闹航班的欧皓辰后续来了,企业至今不敢认领,背后原因太现实

大闹航班的欧皓辰后续来了,企业至今不敢认领,背后原因太现实

削桐作琴
2026-10-07 18:24:14
鼠疫研究机构员工死亡,世卫组织敦促俄罗斯披露更多信息

鼠疫研究机构员工死亡,世卫组织敦促俄罗斯披露更多信息

界面新闻
2026-10-08 09:15:46
人社部财政部正式公布2026年退休人员工资调整方案!

人社部财政部正式公布2026年退休人员工资调整方案!

逍遥论经
2026-10-08 09:57:48
彭玉去世,享年93岁,曾主演《东北一家人》

彭玉去世,享年93岁,曾主演《东北一家人》

韩小娱
2026-10-08 11:41:31
加时惜败!自由人98-101不敌梦想总比分0-2,韩旭出战0分,轮换困境凸显

加时惜败!自由人98-101不敌梦想总比分0-2,韩旭出战0分,轮换困境凸显

小兰看体育
2026-10-08 10:06:41
媒体报道了白俄女歌手被摘除活体器官,但更多的受害者是无声的。

媒体报道了白俄女歌手被摘除活体器官,但更多的受害者是无声的。

吴女士
2026-10-07 21:15:24
曾夺走 2 亿人生命的鼠疫再敲警钟,俄罗斯实验室鼠疫事件的 4 重警示

曾夺走 2 亿人生命的鼠疫再敲警钟,俄罗斯实验室鼠疫事件的 4 重警示

怪味历史连连看
2026-10-07 15:47:32
杨兰兰再现“江湖”!英媒再度将目光投向澳洲劳斯莱斯撞车事件的当事人杨兰兰,不少隐秘细节接连被挖掘出来,这名女子的背景着实不一般

杨兰兰再现“江湖”!英媒再度将目光投向澳洲劳斯莱斯撞车事件的当事人杨兰兰,不少隐秘细节接连被挖掘出来,这名女子的背景着实不一般

火山詩话
2026-10-08 07:19:18
难以置信!网传山东考生620分考入哈工程自动化,国庆毅然返乡复读,宿舍床位已全部清空

难以置信!网传山东考生620分考入哈工程自动化,国庆毅然返乡复读,宿舍床位已全部清空

火山詩话
2026-10-08 08:30:15
“收人四礼,家败人亡”:不管你多穷,这4种礼,千万别收

“收人四礼,家败人亡”:不管你多穷,这4种礼,千万别收

智慧生活笔记
2026-10-07 11:04:05
双向奔赴?祁连县大批游客免费住学生宿舍:文旅未经学生同意,擅自安排,评论两边倒,引发大众争议

双向奔赴?祁连县大批游客免费住学生宿舍:文旅未经学生同意,擅自安排,评论两边倒,引发大众争议

李晚书
2026-10-08 08:16:55
地雷风波升级,金与正发声:野兽都不能进进出出

地雷风波升级,金与正发声:野兽都不能进进出出

中国新闻周刊
2026-10-07 16:43:44
“宝马”停在小区泊位被撞,对方在车上留下纸条,除了车损,车主还希望赔偿“替代性交通费”“通讯费”

“宝马”停在小区泊位被撞,对方在车上留下纸条,除了车损,车主还希望赔偿“替代性交通费”“通讯费”

大风新闻
2026-10-08 10:13:07
上甘岭坑道最禁忌的一夜:17岁女卫生员用嘴吸出战友尿液,秦基伟回忆录曝光真相

上甘岭坑道最禁忌的一夜:17岁女卫生员用嘴吸出战友尿液,秦基伟回忆录曝光真相

纪史行者
2026-10-08 05:10:03
俄媒:俄鼠疫感染区医院暴发瘟疫,出现第二例死亡病例

俄媒:俄鼠疫感染区医院暴发瘟疫,出现第二例死亡病例

阿尔卑斯瞭望
2026-10-07 14:05:52
冲击6大目标!郑钦文vs斯维托丽娜,CCTV5直播,一隐患或成胜负手

冲击6大目标!郑钦文vs斯维托丽娜,CCTV5直播,一隐患或成胜负手

大秦壁虎白话体育
2026-10-08 07:45:11
欠薪2300万元!估值140亿的机器人巨头,如今连工资都发不出来了

欠薪2300万元!估值140亿的机器人巨头,如今连工资都发不出来了

李砍柴
2026-10-07 18:56:23
中锋危机!纳斯:暂无引援计划,詹姆斯或客串中锋

中锋危机!纳斯:暂无引援计划,詹姆斯或客串中锋

体坛周报
2026-10-08 09:48:20
2026-10-08 12:04:49
千纸鹤安安
千纸鹤安安
大自然的搬运工
161文章数 3关注度
往期回顾 全部

科技要闻

微软新Surface来了,2599美元起

头条要闻

鼠疫研究机构员工死亡 世卫组织敦促俄方披露更多信息

头条要闻

鼠疫研究机构员工死亡 世卫组织敦促俄方披露更多信息

体育要闻

从骑马舞到开口全中文 德约在北京不止七冠

娱乐要闻

给吴奇隆点赞的同时,再看蔡康永事件

财经要闻

美联储会议纪要:年内或将再上调利率一次

汽车要闻

智能化再提升 2027款东风标致、东风雪铁龙新车更人性化了

态度原创

房产
亲子
数码
本地
公开课

房产要闻

保利大爆发,冲到榜一!海南楼市前三季度,热销榜出炉!

亲子要闻

看起来没出息,实际上很高级的当妈方式!

数码要闻

5款2TB PCIe 4.0 QLC SSD横评,DIY装机爱好者硬盘怎么选

本地新闻

转型再出发 奋勇打头阵

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版