【Rust自学】4.1. 所有权:栈内存 vs. 堆内存
4.1 所有权栈内存 vs. 堆内存4.1.0 写在正文之前在学习了 Rust 的通用编程概念后就来到了整个 Rust 的重中之重——所有权。它跟其他语言都不太一样很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。本章有五小节-所有权栈内存 vs. 堆内存本文- 所有权规则、内存与分配- 所有权与函数- 引用与借用- 切片Slice4.1.1 什么是所有权所有权是 Rust最独特的特性。它让 Rust 无需 GC垃圾收集器就可以保证内存安全。所有程序在运行时都必须管理它们使用计算机内存的方式。有的语言依靠垃圾收集机制在程序运行时它们会不断寻找不再使用的内存比如 C#。在其他语言中程序员必须显式地分配和释放内存比如 C/C。Rust 不同于前两种。Rust 使用所有权系统来管理内存。这个系统里还有一套规则而编译器在编译时就会检查这套规则。这种做法不会产生任何运行时开销。也就是说在程序运行时这种所有权特性不会减慢程序运行的速度因为 Rust 把内存管理相关工作都提前到了编译时。4.1.2 栈内存Stackvs. 堆内存Heap一般来说程序员不会经常考虑栈内存与堆内存之间的区别。对于 Rust 这样的系统级编程语言来说一个值是在栈内存上还是在堆内存上对语言的行为和你要做的某些决定有更大影响。在代码运行时栈内存和堆内存都是可用的内存但它们的结构很不相同。4.1.3 存储数据1. 栈内存栈内存按值的接收顺序来存储按相反的顺序来将它们移除后进先出Last In First Out简写为LIFO。添加数据叫压入栈push移除数据叫弹出栈pop。所有存储在栈内存上的数据必须拥有已知的、固定的大小。相反编译时大小未知的数据或运行时大小可能发生变化的数据必须存放在堆内存上。2. 堆内存堆内存的组织性差一些。当把数据放入堆内存时会请求一定的空间。操作系统会在堆内存中找到一块足够大的空间把它标记为在用并返回一个指针也就是这个空间的地址。这个过程叫做在堆上进行内存分配有时简称为“分配”。3. 指针与内存因为指针是固定大小的可以把指针本身放在栈内存上。但如果想要指针所指向的具体数据就必须使用指针中的地址来访问它。把数据压到栈内存上比在堆内存上分配要快得多- 在栈内存上操作系统不需要寻找用来存储新数据的空间那个位置永远都在栈内存的顶端栈内存的末尾——也就是当前可用的栈内存的起始位置。- 在堆内存上分配空间则需要做更多的工作操作系统首先需要找到一个足够大的空间来存放数据然后要做好记录方便下一次分配。4.1.4 访问数据访问栈内存中的数据要比访问堆内存中的数据快因为需要通过指针才能找到堆内存中的数据——多了一层间接访问。对于现代处理器来说由于缓存的缘故内存访问需要跳转的次数越少速度往往就越快。如果数据存放得比较近处理器的处理速度就会更快一些——例如放在栈内存上。反之如果数据之间距离较远处理速度就会慢一些——例如放在堆内存上在堆内存上分配大量空间也需要时间。4.1.5 函数调用当代码调用函数时值被传入函数也包括指向堆内存数据的指针。函数的局部变量被压到栈内存上。当函数结束后这些值会从栈内存上弹出。4.1.6 所有权存在的原因所有权解决的问题- 跟踪代码分配的堆内存——换句话说就是跟踪代码的哪些部分正在使用堆内存上的哪些数据- 最小化堆内存上的重复数据- 清理堆内存上未使用的数据以避免空间不足一旦懂了所有权就不用经常去想栈内存和堆内存了。但是知道管理堆数据是所有权存在的原因有助于解释它为什么会这样工作。

相关新闻

mpweixin 微信打卡小程序

mpweixin 微信打卡小程序

一、关键词微信打卡、积分兑换、打卡排行、惩罚措施、社交论坛二、作品包含源码数据库全套环境和工具资源本地部署教程三、项目技术前端技术: Html、Css、Js、Vue2.6、Element-ui、uniapp后端技术:Java、SpringBoot2.2.2、MyBatis-Plus四、运行环境&…

2026/7/23 18:47:02阅读更多 →
【Rust自学】4.2. 所有权规则、内存与分配

【Rust自学】4.2. 所有权规则、内存与分配

4.2 所有权规则、内存与分配 4.2.0 写在正文之前 在学习了 Rust 的通用编程概念后,就来到了整个 Rust 的重中之重——所有权。它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有五小节&#xf…

2026/7/23 18:47:02阅读更多 →
GraphRAG技术深度解析:知识图谱驱动的检索增强生成

GraphRAG技术深度解析:知识图谱驱动的检索增强生成

GraphRAG技术深度解析:知识图谱驱动的检索增强生成 随着大语言模型在企业知识管理场景的深入应用,传统向量RAG在处理需要多跳推理、全局总结和关系分析的复杂查询时逐渐力不从心。GraphRAG(图检索增强生成)通过将知识库构建为知识…

2026/7/23 18:45:02阅读更多 →
AI论文助手哪个好用?2026年4款横评,写作查重降重一站搞定

AI论文助手哪个好用?2026年4款横评,写作查重降重一站搞定

【一句话答案】AI论文助手好不好用,看它能不能覆盖"写作—查重—降重—检测—排版"全流程——毕业之家ai(www.biye.com)从ai生成开题报告到答辩PPT一站配齐,实测一个账号走完整篇论文,不用在多个平台间反复横…

2026/7/23 20:07:29阅读更多 →
手搓万兆软路由与纯固态NAS:基于LattePanda Mu与开源PCIe扩展板的低成本高性能方案

手搓万兆软路由与纯固态NAS:基于LattePanda Mu与开源PCIe扩展板的低成本高性能方案

手搓万兆软路由与纯固态NAS:基于LattePanda Mu与开源PCIe扩展板的低成本高性能方案 最近很多DIY爱好者和极客朋友都在琢磨,怎么用最小的成本,在家里或者小办公室里搭建一套高性能的网络和存储系统。既要万兆网速飞起,又想用上速度超快的NVMe固态硬盘,但成品设备动辄大几千…

2026/7/23 20:07:29阅读更多 →
OpenWrt玩家必备:5款高性价比USB无线网卡实测(含NanoPi NEO3兼容清单)

OpenWrt玩家必备:5款高性价比USB无线网卡实测(含NanoPi NEO3兼容清单)

OpenWrt硬件选型实战:五款USB无线网卡在NanoPi NEO3上的深度横评 对于许多热衷于网络改造和智能家居部署的极客而言,NanoPi NEO3凭借其小巧的体积和强大的OpenWrt兼容性,成为了构建软路由、旁路由或轻量级网络服务的理想平台。然而,其本身并未集成无线模块,这让无线网络的…

2026/7/23 20:07:29阅读更多 →
从零设计立创RK3568B路由器:低成本嵌入式Linux软路由全流程实战

从零设计立创RK3568B路由器:低成本嵌入式Linux软路由全流程实战

从零设计立创RK3568B路由器:低成本嵌入式Linux软路由全流程实战 大家好,我是老张,一个干了十几年网络工程的老兵。最近很多朋友问我,想从单片机转嵌入式Linux,但市面上的开发板动不动就上千块,有没有低成本的学习路径?这不,我正好用业余时间,基于瑞芯微的RK3568芯片,…

2026/7/23 20:07:29阅读更多 →
基于Jetson平台搭载嵌入式GPU的智能服务机器人视觉系统软件总体设计

基于Jetson平台搭载嵌入式GPU的智能服务机器人视觉系统软件总体设计

一、引言随着科学技术的快速发展和人们生活水平的不断提高,人们对服务机器人的需求正日益增加。目前,服务机器人已逐渐在医疗护理、家庭清洁、娱乐教育等多个领域内发挥重要作用,能够有效地帮助人们从枯燥繁琐的日常工作中解放出来。本论文针…

2026/7/23 20:07:29阅读更多 →
嵌入式音频降噪:双二阶IIR滤波器在步进电机噪声抑制中的应用

嵌入式音频降噪:双二阶IIR滤波器在步进电机噪声抑制中的应用

1. 项目概述:嵌入式音频处理中的噪声攻坚战 在嵌入式多媒体设备,比如我们常见的数码相机或智能手机里,录制视频时同步收录清晰的人声是一个看似简单却充满挑战的任务。想象一下,你正在用相机记录一段重要的家庭聚会发言&#xff0…

2026/7/23 20:05:28阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →