news 2026/4/3 5:44:51

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

作者头像

张小明

前端开发工程师

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

从零开始掌握Waifu Diffusion:解决AI绘画配置难题的完整方案

从零开始掌握Waifu Diffusion:解决AI绘画配置难题的完整方案 【免费下载链接】waifu-diffusion 项目地址: https://ai.gitcode.com/hf_mirrors/hakurei/waifu-diffusion 想要快速上手Waifu Diffusion却苦于复杂的配置过程?本文将为你提供一套系统…

作者头像 李华
网站建设 2026/3/26 22:24:41

如何快速掌握SM3加密算法:PHP新手完整指南

如何快速掌握SM3加密算法:PHP新手完整指南 【免费下载链接】SM3-PHP 国密标准SM3的PHP实现 项目地址: https://gitcode.com/gh_mirrors/sm3/SM3-PHP 在数据安全日益重要的今天,国密标准SM3加密算法成为开发者必备的技能之一。SM3-PHP项目提供了完…

作者头像 李华
网站建设 2026/3/31 10:46:42

SC-400合规报告没人敢告诉你的4个隐藏功能(资深工程师揭秘)

第一章:SC-400合规报告的核心价值与行业认知在现代企业数据治理与信息安全体系中,SC-400合规报告已成为衡量组织合规能力的关键工具。它不仅反映了企业在数据隐私、访问控制和审计追踪方面的实施成效,还为监管机构提供了可验证的合规证据。提…

作者头像 李华
网站建设 2026/3/25 2:16:48

BG3模组管理器完整教程:从安装到精通

BG3模组管理器完整教程:从安装到精通 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否在为《博德之门3》的模组管理而烦恼?BG3ModManager作为一款专为博德之…

作者头像 李华