乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
Rust 00.01 所有权概念
2023-02-05 10:10:59
30
0
0
admin
> 所有权概念是RUST 处理垃圾回收的方式。 相比起C语言的手动释放内存以及JAVA的JVM定时清扫没有句柄的对象,RUST是在变量作用域结束的时候释放内存。 # 先理解前提 ## 堆和栈 一般不可变变量、指针等都放在栈中,性能好。 可变变量都放在堆中,可以任意扩,缩。 ## 普通赋值和clone 像INT类型数据,是存放在栈中的,普通的赋值就可以工作。 但是像字符串,是存放在堆中的,普通赋值方式是无效的,需要使用clone(深度copy) 才可以 **RUST 永远不会自动深度copy** ```rust let a = 1; let b = 1; let c = String::form("abc"); let d = c.clone(); ``` # 开始谈所有权 ## 移动 如果写这样的代码: ```rust let c = String::form("abc"); let d = c; ``` 那么从c 赋值到d 那一刻起,c 就失效了,因为这个变量的所有权移交到了d 上(称为移动)。 ## RUST 还可以使用指针做“借用” ```rust let c = String::form("abc"); let d = &c; ``` 借用可以用于给函数传变量。 一般指针都是不可变的,如果要指针是可变的,需要原始变量就是可变的,然后指针也是可变的,然后如果调用函数的话,函数的参数也必须是可变的。 ```rust let mut c = String::form("abc"); the_f(&mut c); fn the_f(some_string: &mut String) { xxxx; } ``` **可变引用与不可变引用不可同时存在** **一次只能有可变引用或者多个不可变引用** 引用可以切片 ```rust let a = [ 1,2,3,4,5 ]; let b = &a[1..3]; ```
上一篇:
Rust 00.00 基本介绍
下一篇:
Rust 01.00 数据类型
文档导航