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

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.xdnf.cn/news/3733.html

相关文章:

  • 命令模式(Command Pattern)详解
  • 使用 Lux Algo + ATR Zones + IIIX 的黄金剥头皮策略(2025 年更新)
  • 抽象工厂模式(Abstract Factory Pattern)
  • c++26新功能——gcc15.1的支持
  • 第1章 Python 解释器安装(Anaconda/Pyenv 推荐)
  • 生成式 AI 的重要性
  • 第6章 Python 基本数据类型详解(int, float, bool, str)细节补充
  • GPU平台-优云智算
  • 机器学习中的分类和回归问题
  • thonny提示自动补全功能
  • 《Qt C++ 项目中升级 GCC 版本的完整指南》
  • 用Suno V4.5试了一下1850字的歌词进行创作出来了6分钟的歌曲
  • Unity基础学习(四)生命周期函数
  • 机器人编程基础---C语言中的表达式和求值
  • PyTorch_点积运算
  • c++回调函数
  • 嵌入式硬件篇---STM32 系列单片机型号命名规则
  • PyTorch_指定运算设备 (包含安装 GPU 的 PyTorch)
  • C++八股--5--设计模式--适配器模式,代理模式,观察者模式
  • 大数据:驱动技术创新与产业转型的引擎
  • 【RocketMQ NameServer】- NettyEventExecutor 处理 Netty 事件
  • 网格不迷路:用 CSS 网格生成器打造完美布局
  • Linxu基本操作
  • 单片机裸机环境下临界区保护
  • Golang WaitGroup 用法 源码阅读笔记
  • # LeetCode 1007 行相等的最少多米诺旋转
  • 动态规划-1137.第N个泰波那契数-力扣(LeetCode)
  • 【iview】es6变量结构赋值(对象赋值)
  • 【LLaMA-Factory实战】1.3命令行深度操作:YAML配置与多GPU训练全解析
  • 轻量级RTSP服务模块:跨平台低延迟嵌入即用的流媒体引擎