news 2026/4/18 8:02:21

*栈(Stack)与堆(Heap)*的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
*栈(Stack)与堆(Heap)*的区别

**栈(Stack)与堆(Heap)**引用自:https://course.rs/basic/ownership/ownership.html
栈和堆是编程语言最核心的数据结构,但是在很多语言中,你并不需要深入了解栈与堆。 但对于 Rust 这样的系统编程语言,值是位于栈上还是堆上非常重要,因为这会影响程序的行为和性能。

栈和堆的核心目标就是为程序在运行时提供可供使用的内存空间。


栈按照顺序存储值并以相反顺序取出值,这也被称作后进先出。想象一下一叠盘子:当增加更多盘子时,把它们放在盘子堆的顶部,当需要盘子时,再从顶部拿走。不能从中间也不能从底部增加或拿走盘子!

增加数据叫做进栈,移出数据则叫做出栈。

因为上述的实现方式,栈中的所有数据都必须占用已知且固定大小的内存空间,假设数据大小是未知的,那么在取出数据时,你将无法取到你想要的数据。


与栈不同,对于大小未知或者可能变化的数据,我们需要将它存储在堆上。

当向堆上放入数据时,需要请求一定大小的内存空间。操作系统在堆的某处找到一块足够大的空位,把它标记为已使用,并返回一个表示该位置地址的指针,该过程被称为在堆上分配内存,有时简称为 “分配”(allocating)。

接着,该指针会被推入栈中,因为指针的大小是已知且固定的,在后续使用过程中,你将通过栈中的指针,来获取数据在堆上的实际内存位置,进而访问该数据。

由上可知,堆是一种缺乏组织的数据结构。想象一下去餐馆就座吃饭:进入餐馆,告知服务员有几个人,然后服务员找到一个够大的空桌子(堆上分配的内存空间)并领你们过去。如果有人来迟了,他们也可以通过桌号(栈上的指针)来找到你们坐在哪。

性能区别
在栈上分配内存比在堆上分配内存要快,因为入栈时操作系统无需进行函数调用(或更慢的系统调用)来分配新的空间,只需要将新数据放入栈顶即可。相比之下,在堆上分配内存则需要更多的工作,这是因为操作系统必须首先找到一块足够存放数据的内存空间,接着做一些记录为下一次分配做准备,如果当前进程分配的内存页不足时,还需要进行系统调用来申请更多内存。 因此,处理器在栈上分配数据会比在堆上分配数据更加高效。

所有权与堆栈
当你的代码调用一个函数时,传递给函数的参数(包括可能指向堆上数据的指针和函数的局部变量)依次被压入栈中,当函数调用结束时,这些值将被从栈中按照相反的顺序依次移除。

因为堆上的数据缺乏组织,因此跟踪这些数据何时分配和释放是非常重要的,否则堆上的数据将产生内存泄漏 —— 这些数据将永远无法被回收。这就是 Rust 所有权系统为我们提供的强大保障。

对于其他很多编程语言,你确实无需理解堆栈的原理,但是在 Rust 中,明白堆栈的原理,对于我们理解所有权的工作原理会有很大的帮助。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 15:28:06

G6多语言支持完全指南:快速构建国际化图可视化应用的终极教程

G6多语言支持完全指南:快速构建国际化图可视化应用的终极教程 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript 项目地址: https://gitcode.com/gh_mirrors/g6/G6 想要让你的图可视化应用走向全球市场?G6图可视化框架的多语…

作者头像 李华
网站建设 2026/4/17 14:51:58

显卡风扇控制革命:5步实现零噪音与极致性能的完美平衡

显卡风扇控制革命:5步实现零噪音与极致性能的完美平衡 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…

作者头像 李华
网站建设 2026/4/17 18:30:37

如何通过开源白板工具OpenBoard实现高效团队协作

如何通过开源白板工具OpenBoard实现高效团队协作 【免费下载链接】openboard 项目地址: https://gitcode.com/gh_mirrors/op/openboard 在数字化工作时代,可视化协作工具已成为提升团队效率的关键因素。开源白板工具OpenBoard凭借其强大的跨平台能力和丰富的…

作者头像 李华
网站建设 2026/4/18 7:00:13

从误报到精准预警,电力故障Agent如何实现99.9%诊断准确率?

第一章:电力故障 Agent 的诊断算法在现代智能电网系统中,电力故障的快速定位与响应是保障供电稳定性的关键。基于多 Agent 的分布式诊断架构被广泛应用于电网监控,其中每个 Agent 负责特定区域的故障检测与初步分析。其核心在于高效的诊断算法…

作者头像 李华
网站建设 2026/4/14 3:09:48

核工业自动化系统安全升级之路(从被动防御到智能响应)

第一章:核工业控制 Agent 的安全逻辑在高风险的核工业环境中,自动化控制系统中的 Agent 必须具备严格的安全逻辑,以确保反应堆运行、冷却系统调控和辐射监测等关键任务的可靠性与容错性。这些 Agent 不仅需要实时响应物理参数变化&#xff0c…

作者头像 李华