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的所有权相关推荐

  1. Rust的所有权(Ownership)

    1. 什么是Ownership Rust的所有权,是一个跨时代的理念,是内存管理的第二次革命.Ownership是Rust的一个核心概念. 每种编程语言都有自己的一套内存管理的方法.有些需要显式的分配 ...

  2. rust 案例_理解Rust的引用与借用

    困惑 接触Rust也一段时间了,但对References(引用) .borrowing(借用) . &关键字.ref关键字.* 关键字,这几个词非常困惑.常见的问题不在乎下面几条: & ...

  3. rust的所有权与引用

    所有权 所有权是rust最独特的特性,它让rust无需GC就可以保证内存安全. 什么事所有权 rust的核心特性就是所有权 所有程序在运行时都必须管理他们使用计算机内存的方式 有些语言有垃圾收集机制, ...

  4. 理解Rust中的Result/Option/unwrap/?

    我在学习Rust时,注意到有4个概念经常放到一起讨论:Result.Option.unwapr和?操作符.本文记录了我对这4个Rust概念的思考,这个思考过程帮助我理解并学会了如何写出更地道的Rust ...

  5. i3够晚rust吗_【译】理解Rust中的Futures (一)

    原文标题:Understanding Futures In Rust -- Part 1 原文链接:https://www.viget.com/articles/understanding-futur ...

  6. Rust的所有权与可变性

    Rust与其他语言的比较 文章目录 Rust与其他语言的比较 特性 所有权 直接转移 间接转移 引用.借用 可变性与不可变性 特性 所有权 在Rust中,若声明有类似于Java或C++中的引用传递类型 ...

  7. Rust布道者张汉东倾授,入门Rust初学者都要攻破哪些难点?

    摘要:Rust语言学习曲线过于陡峭?初学者看懂这张思维导图,快速入门. Rust语言这两年的热度大家有目共睹,作为一个有着突破性变革意义的语言,其光鲜背后也有诸多质疑,对于想要在系统编程语言上更上一层 ...

  8. Rust 五分钟了解,三十分种入门

    Rust 快速入门 初始化项目 基础 变量 - 常量 数据类型 函数 注释 控制流 所有权 移动 克隆 所有权与函数 返回值与作用域 引用与借用 可变引用 Slice 类型 其他类型的 slice 结 ...

  9. 三万字 | 2021 年 Rust 行业调研报告

    作者 | 张汉东       责编 | 欧阳姝黎 文前 Rust 语言是一门通用系统级编程语言,无GC且能保证内存安全.并发安全和高性能而著称.自2008年开始由 Graydon Hoare 私人研发 ...

最新文章

  1. 中文微博与社会化媒体的区域距离
  2. composer的简单使用
  3. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化
  4. 入行AI,你需要一本Python机器学习入门,赶紧收藏!
  5. 提高github访问速度(深入研究底层网络通信、域名解析等原理)
  6. DotNetOpenAuth实践之Webform资源服务器配置
  7. Nacos 配置实时更新原理分析
  8. SAS Planet软件介绍与使用教程
  9. 什么是TTL电平和cmos电平?ttl电平和cmos电平的区别是什么?
  10. php宝宝起名,宝宝在线起名取名大全
  11. xtrabackup全量备份与全量恢复
  12. ESP32 启动流程
  13. 精致生活品味相伴,Barsetto百胜图BAC025B胶囊咖啡机测评
  14. Telnet操作步骤
  15. 华为鸿蒙删除视频报错rm: local.mp4: Owner died
  16. 如何查看本机JDK版本-windows系统
  17. k8s(五):核心技术-Service
  18. php 抓取弹幕,php实现斗鱼弹幕,一起来欣赏弹幕吧~
  19. Excel常用的单元格格式
  20. Python Pandas行列的选择、添加、删除

热门文章

  1. 【小白冲冲冲!!!】补2:SLAM中最小二乘问题的引入及求解
  2. stl之list双向链表容器应用基础
  3. python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡
  4. cas4.0 mysql_【SSO单点系列】:CAS4.0 CAS整合SpringMVC+MyBatis实现数据库校验(04)
  5. catia装配体怎么把零件旋转180度_各种装配夹具,来看看适合你用的
  6. 计算机原理与编程设计,最优化计算机原理与算法程序设计
  7. Python数据结构与算法(1.3)——Python基础之输入、输出与高阶赋值
  8. android 日历_适用于Android的十大最佳日历应用
  9. struts2路径配置_Struts 2结果路径配置示例
  10. sping boot demo解释