当前位置: 首页 > 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是那个堆中实际数据的所有者。但无论如何描述,需要理解所有者和值之间的真相。

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

相关文章:

  • 【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简介
  • ​​信息泄露:网站敏感文件泄漏的隐形危机与防御之道​
  • 高性能架构设计-高可用
  • 专为焦油介质打造:煤焦油专用气动硬密封调节 V 型球阀(带手动)的卓越特点-耀圣
  • C#VisionMaster算子二次开发(非方案版)
  • 在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务
  • 考研408《计算机组成原理》复习笔记,第二章计算机性能
  • 第2章 创建独立的 Anaconda 环境
  • 基于机器学习的心脏病数据分析与可视化(百度智能云千帆AI+DeepSeek人工智能+机器学习)健康预测、风险评估与数据可视化 健康管理平台 数据分析与处理
  • 网格不迷路:用 CSS 网格生成器打造完美布局
  • 0902Redux_状态管理-react-仿低代码平台项目