理解Rust的所有权
Time: 20190921
所有权是Rust中最独特的特征,有了它就能保证Rust内存安全,且无需垃圾回收机制。因此,理解Rust的所有权机制非常重要。和所有权一起讲到的其他几个概念是:
- 引用,借用
- 切片
什么是所有权
Rust语言的核心特征。这个概念解释起来并不复杂,但是对于后续的Rust语言学习有深远的影响。
不管什么编程语言,运行时都需要管理内存的使用方式。有些语言提供了垃圾回收机制,该机制会经常去查看不再使用的内存,然后在恰当的时机回收它们。
在一些语言中,内存管理需要交给程序员,手动分配和回收内存。
Rust用的是第三种方式:内存由所有权系统以及一些规则来管理,这些规则是编译器在编译时检查。
所有权这种特性不会降低程序运行时的效率。
所有权这种概念对很多人都是一个新的概念,因此花时间了解它的含义很有必要。
理解了所有权,就为历届Rust为何独一无二打下了坚实的基础。
我们将从字符串相关视角来学习所有权。
栈,堆
系统编程语言需要我们了解栈和堆的使用方式。
栈和堆都是运行时可以在代码中使用的内存空间,只是组织方式有所不同。
栈的基本特性就是后入先出,一般有两种基本操作:
- push:压栈,存储数据
- pop:出栈,弹出数据
栈上的所有数据都必须有确定的,已知的大小。如果是编译期不确定的,或者会在运行时变化的数据都需要存在堆上。
堆比栈的组织性要少很多,当把数据存储到堆上时,首先需要请求分配一块空间。操作系统会在堆上寻找足够大的可用的空间,将其标记为使用中,并返回一个指针,这就是该位置的地址。这个过程称作在堆上分配内存,一般直接简称为分配内存。
往栈上存储数据不是分配,因为栈的指针是确定的,固定大小的,指针可以存储到栈上,提取实际数据时,必须按照指针去找。
了解这个过程,可以知晓,数据分配到堆上比在栈上要慢很多。
读取堆上数据也比读取栈上数据慢很多,堆上的数据需要循着指针的方向去拿到数据。
TBD…
引用和借用
切片类型
参考
https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html
2019.10 Update:
第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、
理解Rust的所有权相关推荐
- Rust的所有权(Ownership)
1. 什么是Ownership Rust的所有权,是一个跨时代的理念,是内存管理的第二次革命.Ownership是Rust的一个核心概念. 每种编程语言都有自己的一套内存管理的方法.有些需要显式的分配 ...
- rust 案例_理解Rust的引用与借用
困惑 接触Rust也一段时间了,但对References(引用) .borrowing(借用) . &关键字.ref关键字.* 关键字,这几个词非常困惑.常见的问题不在乎下面几条: & ...
- rust的所有权与引用
所有权 所有权是rust最独特的特性,它让rust无需GC就可以保证内存安全. 什么事所有权 rust的核心特性就是所有权 所有程序在运行时都必须管理他们使用计算机内存的方式 有些语言有垃圾收集机制, ...
- 理解Rust中的Result/Option/unwrap/?
我在学习Rust时,注意到有4个概念经常放到一起讨论:Result.Option.unwapr和?操作符.本文记录了我对这4个Rust概念的思考,这个思考过程帮助我理解并学会了如何写出更地道的Rust ...
- i3够晚rust吗_【译】理解Rust中的Futures (一)
原文标题:Understanding Futures In Rust -- Part 1 原文链接:https://www.viget.com/articles/understanding-futur ...
- Rust的所有权与可变性
Rust与其他语言的比较 文章目录 Rust与其他语言的比较 特性 所有权 直接转移 间接转移 引用.借用 可变性与不可变性 特性 所有权 在Rust中,若声明有类似于Java或C++中的引用传递类型 ...
- Rust布道者张汉东倾授,入门Rust初学者都要攻破哪些难点?
摘要:Rust语言学习曲线过于陡峭?初学者看懂这张思维导图,快速入门. Rust语言这两年的热度大家有目共睹,作为一个有着突破性变革意义的语言,其光鲜背后也有诸多质疑,对于想要在系统编程语言上更上一层 ...
- Rust 五分钟了解,三十分种入门
Rust 快速入门 初始化项目 基础 变量 - 常量 数据类型 函数 注释 控制流 所有权 移动 克隆 所有权与函数 返回值与作用域 引用与借用 可变引用 Slice 类型 其他类型的 slice 结 ...
- 三万字 | 2021 年 Rust 行业调研报告
作者 | 张汉东 责编 | 欧阳姝黎 文前 Rust 语言是一门通用系统级编程语言,无GC且能保证内存安全.并发安全和高性能而著称.自2008年开始由 Graydon Hoare 私人研发 ...
最新文章
- 中文微博与社会化媒体的区域距离
- composer的简单使用
- java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化
- 入行AI,你需要一本Python机器学习入门,赶紧收藏!
- 提高github访问速度(深入研究底层网络通信、域名解析等原理)
- DotNetOpenAuth实践之Webform资源服务器配置
- Nacos 配置实时更新原理分析
- SAS Planet软件介绍与使用教程
- 什么是TTL电平和cmos电平?ttl电平和cmos电平的区别是什么?
- php宝宝起名,宝宝在线起名取名大全
- xtrabackup全量备份与全量恢复
- ESP32 启动流程
- 精致生活品味相伴,Barsetto百胜图BAC025B胶囊咖啡机测评
- Telnet操作步骤
- 华为鸿蒙删除视频报错rm: local.mp4: Owner died
- 如何查看本机JDK版本-windows系统
- k8s(五):核心技术-Service
- php 抓取弹幕,php实现斗鱼弹幕,一起来欣赏弹幕吧~
- Excel常用的单元格格式
- Python Pandas行列的选择、添加、删除
热门文章
- 【小白冲冲冲!!!】补2:SLAM中最小二乘问题的引入及求解
- stl之list双向链表容器应用基础
- python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡
- cas4.0 mysql_【SSO单点系列】:CAS4.0 CAS整合SpringMVC+MyBatis实现数据库校验(04)
- catia装配体怎么把零件旋转180度_各种装配夹具,来看看适合你用的
- 计算机原理与编程设计,最优化计算机原理与算法程序设计
- Python数据结构与算法(1.3)——Python基础之输入、输出与高阶赋值
- android 日历_适用于Android的十大最佳日历应用
- struts2路径配置_Struts 2结果路径配置示例
- sping boot demo解释