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

RUST变量学习笔记

1,作用域概念

捕获环境

2,所有权概念

Rust则是通过所有权和借用来保证内存安全。很多人不理解为啥说Rust是内存安全的,其实就是在默认情况下,你是写不出内存不安全的代码的。
Rust的所有权并不难理解,它有且只有如下三条规则:
(1)Rust中的每个值都有一个被称为其所有者的变量(即:值的所有者是某个变量);
(2)值在任一时刻有且只有一个所有者;

(3)当所有者(变量)离开作用域,这个值将被销毁。
这里对第三点做一些补充性的解释,所有者离开作用域会导致值被销毁,这个过程实际上是调用一个名为drop的函数来销毁数据释放内存。在前文解释作用域规则时曾提到过,销毁的数据特指堆栈中的数据,如果变量绑定的值是全局内存区内的数据,则数据不会被销毁。例如:

fn main(){{let mut s = String::from("hello");} // 跳出作用域,栈中的变量s将被销毁,其指向的堆// 中数据也被销毁,但全局内存区的字符串字面量仍被保留
}

Rust中每个值都有一个所有者,但这个说法比较容易产生误会。例如:

#![allow(unused)]
fn main() {
let s = String::from("hello");
}

多数人可能会误以为变量s是堆中字符串数据hello的所有者,但实际上不是。String字符串的实际数据在堆中,但是String大小不确定,所以在栈中使用一个胖指针结构来表示这个String类型的数据,这个胖指针中的指针指向堆中的String实际数据。也就是说,变量s的值是那个胖指针,而不是堆中的实际数据。

因此,变量s是那个胖指针的所有者,而不是堆中实际数据的所有者。但是,由于胖指针是指向堆中数据的,多数时候为了简化理解简化描述方式,也经常会说s是那个堆中实际数据的所有者。但无论如何描述,需要理解所有者和值之间的真相。

相关文章:

  • 【AI面试准备】XMind拆解业务场景识别AI赋能点
  • 2025年渗透测试面试题总结-拷打题库36(题目+回答)
  • 迭代器的思想和实现细节
  • 【计算机视觉】三维重建: OpenMVS:工业级多视图立体视觉重建框架
  • 腾讯混元-DiT 文生图
  • 基于Jenkins的DevOps工程实践之Jenkins共享库
  • Python 数据智能实战 (10):智能商品推荐 - LLM “猜你喜欢”
  • ES6语法
  • 驱动精灵v9.7(含网卡版)驱动工具软件下载及安装教程
  • MySQL 日期加减函数详解
  • 进程间通信(IPC)
  • sql 注入中的万能密码
  • iOS启动优化:从原理到实践
  • ActiveMQ 集群搭建与高可用方案设计(二)
  • 大数据:数字时代的驱动力
  • 数据库原理与应用实验二 题目七
  • Oracle 11g通过dg4odbc配置dblink连接神通数据库
  • 前端面试每日三题 - Day 23
  • 多数据源动态切换
  • HTML简介
  • 中国电信财务部总经理周响华调任华润集团总会计师
  • 金融监管总局:正在修订并购贷款管理办法,将进一步释放并购贷款的潜力
  • 奥迪4S店内揭车衣时遭“连环车损”,双方因赔偿分歧陷僵局
  • 上海国际电影节特设“走进大卫·林奇的梦境”单元
  • 青岛鞋企双星名人集团家族内斗:创始人发公开信指控子孙夺权
  • 媒体:南京秦淮区卫健委回应一医院涉嫌违规提供试管婴儿服务