当前位置: 首页 > news >正文

rust学习笔记4-基础类型2和内存管理模型

rust和其他语言一样除了基本的整型、浮点型、布尔、字符外也有复合类型、集合类型等复杂类型

1.复合类型数组和元组

数组不用过多介绍,但元组不是所有语言都有,目前我学的语言只有python,rust有这个类型

与数组相比相同点:都是复合类型、长度都是固定的,不同点在于元组可以是不同类型的数据类型,数组必须同一类型的数据类型。

数组声明与使用

fn main() {
   //声明 a 是一个长度为 5 的整型数组
   let a = [1, 2, 3, 4, 5];
   //声明b 是一个长度为3的字符串数组
   let b = ["python", "go", "rust"];
   // 等同于 let c = [3, 3, 3, 3, 3];
   let c = [3; 5];
   //访问
   println!("{}",a[0]);
   //a[0] = 123; //同样如果没有mut:数组 a 不可变,不可改变里面的值
   let mut a = [1, 2, 3]; //加了mut才能修改
   a[0] = 4; // 正确
   //循环遍历
   for i in a.iter() {
    println!("值为 : {}", i);
   }
}

元组声明与使用

fn main() {
   //声明一个元组tuple
   let tuple = (1, "beijing", true, 0.9);
   //访问
   println!("{}", tuple.0);
   /*元组不可遍历和切片(这点与python中的元组有很大不同)
    Rust中的元组不能直接进行遍历。元组是一个固定长度的、可以包含不同类型元素的复合类型。
    不能使用for循环直接遍历元组,因为元组没有实现Iterator trait。
    元组也不能像数组那样进行切片操作。只能通过索引来访问元组中的单个元素,索引从0开始,
    使用点号(.)来访问,例如:tuple.0,tuple.1等。
    如果你需要遍历或切片操作,有以下替代方案:
        1.如果需要遍历,可以将元组转换为数组(要求数据类型相同)
        2.如果元素类型相同,考虑使用数组或Vec替代元组
        3.可以使用模式匹配来一次性获取多个元素
    */
    // 使用模式匹配解构元组
    let(a,b,c,d) = tuple;
    println!("a: {}, b: {}, c: {}, d:{}", a, b, c, d);

}

2.内存管理模型

其他语言内存管理方式
1.C/C++ 纯手工管理内存(缺乏安全抽象模型),容易出错
2.以Java/Python/Go等于语言,采用gc管理:垃圾回收,虽然内存安全,
但是有(stop the world),对性能影响非常大
rust语言内存管理方式
1.考虑性能,借鉴c++的rall资源管理方式
2.考虑安全:增加所有权语义

所有权的三大核心规则
    1.每个值有且只有一个所有者
    值在任意时刻只能被一个变量拥有,所有者负责值的生命周期。
    2.所有者离开作用域时,值会被自动释放
    通过 Drop trait 自动调用清理代码(如释放内存)。
    3.所有权可通过赋值或函数传递转移(Move)
    赋值 let x = y; 或传参会转移值的所有权,原变量将失效(编译器确保安全)。

http://www.dtcms.com/a/33086.html

相关文章:

  • ike-scan:发现并指纹识别 IKE 主机(IPsec VPN 服务器)!全参数详细教程!Kali Linux教程!黑客教程!
  • 解决jupyter notebook不是内部或外部命令问题
  • 正则表达式--捕获exec方法
  • Grouped-Query Attention(GQA)详解: Pytorch实现
  • 红帽7基于kickstart搭建PXE环境
  • 【MySQL 一 数据库基础】深入解析 MySQL 的索引(3)
  • redis-bitmap使用场景
  • CSS中的`position`属性的几种定位方式
  • 计算机视觉算法实战——三维重建(主页有源码)
  • Linux提权之suid提权(六)
  • Python--函数进阶(下)
  • SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)
  • Http模块及练习
  • C++单例模板类,继承及使用
  • C语言宏定义的底层应用
  • 【SpringMVC】概述 SSM:Spring + SpringMVC + Mybats
  • 在CentOS安装Docker
  • Redis常用数据类型及其应用案例
  • 机器学习数学基础:30.Pearson相关系数及t检验教程
  • 信息安全实战04_ECC椭圆曲线加密算法原理详解
  • 蓝桥杯试题:区间次方和(前缀和)
  • Gin从入门到精通 (四)请求参数
  • 网络运维学习笔记 022 HCIA-Datacom新增知识点03园区网典型组网架构及案例实战
  • 第一届网谷杯
  • 力扣每日一题【算法学习day.133】
  • 敏捷开发08:如何高效开每日站会(Daily Stand-up Meeting)
  • LEARNING ON LARGE-SCALE TEXT-ATTRIBUTED GRAPHS VIA VARIATIONAL INFERENCE
  • Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
  • NIO-Reactor模型梳理与demo实现
  • Linux 第三次脚本作业