Rust可变与不可变探讨

《Rust圣经》の所有权和借用

Rust中的借用规则

  • let num=1;在这句代码对应的内存图

变量声明内存图

  • let mut num=1 num本质上一片内存,这片内存一定可以读,只有声明mut的时候,这片内存才可以被写。 为了突出mut关键字的特别,我们在「条目1」的基础上改进内存图。
    使用三角形表示读写权限

  • 让我们加入引用,观察此时的内存图
    在这里插入图片描述
    在这里插入图片描述

  • 引用的特性:不可变引用对不会“加锁”,可变引用会“加锁”;这里“加锁”是指Rust编译器认为:一个变量被可变引用之后,可变引用会对该变量产生占用,直到可变引用被消费。这个“占据”或者“加锁”让我们用图形来表示。
    在这里插入图片描述

  • 有人会提出疑问了:如果「不可变引用a」已经独占num的引用通道 「可变引用b」为什么会被允许建立。答案是,「不可变引用a」建立引用关系后该没有没有被使用,独占效应是没有启用的。让我们看一下以下使用了「不可变引用a」的代码就知道了。

在这里插入图片描述

  • 「不可变引用」的声明和消费之间,其实也会排斥「可变引用」的,但是却能容忍其他可变引用存在,因为读和读之间,不会产生任何竞争,读的过程中,却会害怕被该写导致脏读或者幻读。
  • 在这里插入图片描述

综上,其实Rust中看起来很复杂借用检查规则,总结起来就是一条:「可变量引用」在声明和消费之间的不允许其他引用建立;「不可变量引用」在声明和消费之间会排斥「可变引用」。另外我们也可以了解到,Rust编译器在鼓励我们一个引用的声明和消费之间,不要隔得太远,尽量即刻声明即刻消费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值