Rust 认识所有权

目录

  • 什么是所有权?
    • 栈(Stack)与堆(Heap)
    • 所有权规则
    • 变量作用域
    • String 类型
    • 内存与分配
      • 变量与数据交互的方式(一):移动
      • 变量与数据交互的方式(二):克隆
      • 只在栈上的数据:拷贝
    • 所有权与函数
    • 返回值与作用域
  • 引用与借用
    • 可变引用
    • 悬垂引用(Dangling References)
    • 引用的规则
  • Slice 类型
    • 字符串 slice
      • 字符串字面值就是 slice
      • 字符串 slice 作为参数
    • 其他类型的 slice


本文为个人学习过程中的副产物,在原文基础上删减掉我已经掌握且个人认为不重要的内容,原文请参考认识所有权。

所有权(系统)是 Rust 最为与众不同的特性,它让 Rust 无需垃圾回收(garbage collector)即可保障内存安全,理解 Rust 中所有权如何工作是十分重要的。

什么是所有权?#

常见的编程语言管理其运行时使用计算机内存的方式一般是垃圾回收机制、程序员亲自分配和释放内存。
Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。

栈(Stack)与堆(Heap)#

在像 Rust 这样的系统编程语言中,值是位于栈上还是堆上在更大程度上影响了语言的行为以及为何必须做出这样的抉择。

栈以放入值的顺序存储值并以相反顺序取出值,这也被称作 后进先出(last in, first out)。栈中的所有数据都必须占用已知且固定的大小。

在编译时大小未知或大小可能变化的数据,要改为存储在堆上。 堆是缺乏组织的:当向堆放入数据时,你要请求一定大小的空间。内存分配器(memory allocator)在堆的某处找到一块足够大的空位,把它标记为已使用,并返回一个表示该位置地址的 指针(pointer)。

所有权规则#

谨记这些规则:

  • Rust 中的每一个值都有一个 所有者(ownerÿ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/642070.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

众筹商城源码 众筹商品平台 商城加共识元富之路 网上商城众筹,附带系统搭建教程

前端是编译后的,后端PHP,带商城 全局替换http://dami.5288tj.com为你的域名 /MbedAdminentersdfsdrwe.php/index/login 账号:admin 密码;admin888 源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/

谷歌(语法)搜索基本指令分享

1.site指令 *查询网站被搜索引擎的收录量 "限走搜索的范围是在某个特定的网站或域名下 *限走网站的类型,eg:.com/.us/.fr/.cn/.gov 1.site域名,eg:site:123456.com(主域名,一级域名),eg:site:123456.com(二级域名)级域名网页…

B203-若依框架应用

目录 简介版本RuoYi-fast项目准备新增模块/代码生成 简介 基于SpringBoot的权限管理系统,基于SpringBoot开发的轻量级Java快速开发框架 版本 前后端未分离单应用版本:RuoYi-fast,前后端未分离多模块版本:RuoYi 前后端分离单应用…

3D视觉技术引领活塞杆抓取新革命

随着工业自动化的快速发展,对高精度、高效率的抓取技术需求日益增长。活塞杆作为重要的机械零部件,其抓取过程的精确性直接关系到产品质量和生产效率。近年来,3D视觉技术以其独特的优势,在活塞杆抓取领域展现出巨大的应用潜力。 …

【行为型模式】中介者模式

一、中介者模式概述 中介者模式定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式。(对象行为型模式) 中介者模式…

STM32F407,429参考手册(中文)

发布一个适用STM32F405XX、STM32F407XX、STM32F415XX、STM32F417XX、STM32F427XX、STM32F437XX的中文数据手册,具体内容见下图: 点击下载(提取码:spnn) 链接: https://pan.baidu.com/s/1zqjKFdSV8PnHAHWLYPGyUA 提取码…

ICC2:自动摆port的命令

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 ICC2中可以通过命令去实现自动摆port,示例如下: set_individual_pin_constraints -ports $ports -allowed_layers M6 -sides 1 -pin_spacing_distance 1 这里需要…

win11不能新建.txt文件?试试这个方法。

检查你的系统是否有notepad程序。 查看“开始”菜单中是否有“记事本”这个程序。如果没有,就去“Microsoft store”中下载一个“windows notepad”安装上。 如果有notepad,还是无法新建.txt文件,就需要设置注册表了。 键盘输入“winR”&…

STM32 ADC转换器

一、ADC简介 ADC(Analog-Digital Converter,模拟-数字转换器),可以将引脚上连续变化的模拟量转换为内存中存储的数字量,建立模拟电路到数字电路的桥梁 模拟量:时间和幅值均连续的信号,例如&…

中红医疗:纷享销客CRM系统如何助力​数字化“狂飙”

纷享销客深耕 CRM 多年,可以顺畅打通 CRM 和 ERP 系统客户资源池,将金蝶苍穹平台的物料、产品基础主数据作为档案同步到纷享销客,以便商务维护好产品及库存。 纷享销客通过成熟的集成方案提高系统耦合性,让销售实时获得新产品及营…

40-50W 1.5KVDC 隔离 宽电压输入 DC/DC 电源模块——TP40(50)DC 系列

TP40(50)DC系列电源模块额定输出功率为40-50W、应用于2:1、4:1电压输入范围 9V-18V、18V-36V、36V-75V、9V-36V、18V-75V的输入电压环境,输出电压精度可达1%,可广泛应用于通信、铁路、自动化以及仪器仪表等行业。