当前位置: 首页 > 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; 或传参会转移值的所有权,原变量将失效(编译器确保安全)。

相关文章:

  • 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椭圆曲线加密算法原理详解
  • 证监会副主席王建军被查
  • 人物|德国新外长关键词:总理忠实盟友、外交防务专家、大西洋主义者
  • 医学统计专家童新元逝世,终年61岁
  • 广东省副省长刘红兵跨省任湖南省委常委、宣传部部长
  • 4月制造业PMI为49%,比上月下降1.5个百分点
  • 美的集团一季度净利增长38%,库卡中国机器人接单增超35%