如何验证Rust中的字符串变量在超出作用域时自动释放内存?

讲动人的故事,写懂人的代码

在公司内部的Rust培训课上,讲师贾克强比较了 Rust、Java 和 C++ 三种编程语言在变量越过作用域时自动释放堆内存的不同特性。

Rust 通过所有权系统和借用检查,实现了内存安全和自动管理,从而避免了大部分内存泄漏。Rust 自动管理标准库中数据类型(如 BoxVecString)的堆内存,并在这些类型的变量离开作用域时自动释放内存,即使程序员未显式编写清理堆内存的代码。

只有当程序员实现自定义的数据类型,并且该类型拥有需要手动管理的资源时,才需要在 drop 函数中编写清理代码。如果在这种情况下忘记了编写清理代码,确实可能导致资源泄漏,包括但不限于内存泄漏。

相比之下,Java 主要由垃圾回收器(GC)控制内存管理,而 C++ 则需要程序员通过构造函数和析构函数手动控制内存的分配和释放。

席双嘉提出问题:“我对Rust中的字符串变量在超出作用域时自动释放内存的机制非常感兴趣。但如何能够通过代码实例来验证这一点呢?”

在这里插入图片描述

贾克强说这是一个好问题,可以作为今天的作业。他请对这个问题感兴趣的同学,在课下找AI编程助手小艾来完成这个作业。

赵可菲对这个问题颇感兴趣。在小艾的帮助下,她迅速完成了代码编写并且成功运行。为了让Rust新手能够理解,她请小艾在代码中的每一行关键语句前加上了注释。此外,她还在main函数后添加了这个程序的运行结果输出,如代码清单1-1所示。

代码清单1-1 验证当字符串变量超出范围时,Rust会自动调用该变量的drop函数

// 使用 jemallocator 库中的 Jemalloc 内存分配器
use jemallocator::Jemalloc;// 用属性(用于为代码的特定部分提供元信息的注释)定义一个全局的内存分配器,使用 Jemalloc 作为系统的全局内存分配器
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;fn main() {{// 进入一个新的作用域,作用域是用大括号 `{}` 包围的代码块// 创建一个包含 100M 大字符串的自定义结构体let _large_string_owner = LargeStringOwner::new(100_000_000); // 100 MB// 打印创建大字符串后消息println!("Large string created.");} // 这里作用域结束,`large_string_owner` 变量自动销毁,`drop` 函数被调用// 打印离开作用域后的消息println!("Large string scope ended.");
}
// 该程序运行后的输出为:
// Large string created.
// Dropping LargeStringOwner, releasing large string memory.
// Large string scope ended.// 自定义一个包含大字符串的结构体,并实现 Drop trait
struct LargeStringOwner {// 包含一个字符串字段,但允许未使用(避免编译器警告)#[allow(dead_code)]content: String,
}impl LargeStringOwner {// 为结构体实现一个新的构造函数,接受字符串大小作为参数

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

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

相关文章

PID控制算法学习笔记分享

目录 一、参数设定 二、PID计算公式 三、位置式PID代码实现 四、增量式PID代码实现 五、两种控制算法的优缺点 六、PID算法的改进 一、参数设定 比例系数(kp):P项的作用是根据当前误差的大小来产生一个控制量。它直接与误差成正比&#…

【机器学习300问】126、词嵌入(Word Embedding)是什么意思?

人类的文字,作为一种高度抽象化的符号系统,承载着丰富而复杂的信息。为了让电脑也能像人类一样理解并处理这些文字,科学家们不断探索各种方法,以期将人类的语言转化为计算机能够理解的格式。 一、One-Hot编码的不足 在自然语言处…

NSSCTF中的[WUSTCTF 2020]朴实无华、[FSCTF 2023]源码!启动! 、[LitCTF 2023]Flag点击就送! 以及相关知识点

目录 [WUSTCTF 2020]朴实无华 [FSCTF 2023]源码!启动! [LitCTF 2023]Flag点击就送! 相关知识点 1.intval 绕过 绕过的方式: 2.session伪造攻击 [WUSTCTF 2020]朴实无华 1.进入页面几乎没什么可用的信息,所以想到使用dis…

Spring MVC学习记录(基础)

目录 1.SpringMVC概述1.1 MVC介绍1.2 Spring MVC介绍1.3 Spring MVC 的核心组件1.4 SpringMVC 工作原理 2.Spring MVC入门2.1 入门案例2.2 总结 3.RequestMapping注解4.controller方法返回值4.1 返回ModelAndView4.2 返回字符串4.2.1 逻辑视图名4.2.2 Redirect重定向4.2.3 forw…

Shopee菲律宾本土店允许中途无理由退货,如何应对退货后库存混乱问题?

Shopee菲律宾本土店最近实施了一项新政策,自2024年6月10日起,允许买家在商品仍在运输途中申请退货与退款,此即“在途退货/退款”功能,主要的目的是为了提升买家的购物体验,增强市场竞争力。 图源:Shopee菲律…

一年前 LLM AGI 碎片化思考与回顾系列⑤ · 探索SystemⅡ复杂推理的未知之境

阅读提示: 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成,在内容上,与不久前刚刚完稿的那篇10万字文章 「融合RL与LLM思想,探寻世界模型…

vue3delete请求报403forbidden,前后端解决方式,cookie无效问题

在做开发时,前期已经在Controller类加上CrossOrigin(origins "*"),发送get和post请求都没问题,但遇到delete请求时,又报出跨域问题 一.前端添加proxy代理服务器(未能解决) 在vue.config.js中使…

连接Huggingface报requests.exceptions.SSLError错误

最近在学习使用 SHAP 算法解释 BERT 模型的输出结果,然而在从 Huggingface 上导入模型和数据集的过程中出现了网络连接相关的错误,本文用于记录错误类型和解决错误的方法。 1 代码示例 SHAP 官方展示的代码如下: import datasets import nu…

Linux screen命令使用

文章目录 1. 前言2. screen是什么?3. screen使用场景描述3. screen常用命令4. 小结5. 参考 1. 前言 实际开发中用到的云服务器,如果项目使用的是python,需要利用项目运行一些时间较长的项目程序脚本的话,由于我们通过ssh连接远端服务器&…

一文详解扩散模型

文章目录 1、常见的生成模型2、变分推断简介3、文生图的评价指标4、Diffusion Models5、其他技术交流群精选 节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地…

2024年通信安全员ABC证证考试题库及通信安全员ABC证试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年通信安全员ABC证证考试题库及通信安全员ABC证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…

项目3:从0开始的RPC框架(扩展版)-3

七. 负载均衡 1. 需求分析 目前我们的RPC框架仅允许消费者读取第一个服务提供者的服务节点,但在实际应用中,同一个服务会有多个服务提供者上传节点信息。如果消费者只读取第一个,势必会增大单个节点的压力,并且也浪费了其它节点…

Jenkins+K8s实现持续集成(一)

镜像仓库的搭建 docker run -d \--restartalways \--name registry \-p 5000:5000 \-v /root/devops/registry/data:/var/lib/registry \registry安装完之后,执行下面命令可以看到镜像仓库已经安装成功 docker ps 然后在浏览器上输入下面地址进行访问 http://ip:…

车牌号识别(低级版)

import cv2 from matplotlib import pyplot as plt import os import numpy as np from paddleocr import PaddleOCR, draw_ocr from PIL import Image, ImageDraw, ImageFont# 利用paddelOCR进行文字扫描,并输出结果 def text_scan(img_path):ocr PaddleOCR(use_a…

HTML(11)——CSS三大特性

CSS拥有三大特性&#xff0c;分别是&#xff1a;继承性&#xff0c;层叠性&#xff0c;优先级 继承性 说明&#xff1a;子级标签默认继承父级标签的文字控制属性。 如果子级自己有样式&#xff0c;则父级的属性不生效 例如&#xff1a; <style> body{ font-size:30px;…

ADS1220芯片写寄存器失败

1&#xff09;场景&#xff1a;最近调试ADS1220 的芯片&#xff0c;需要读取不同通道的AD值&#xff0c;修改寄存器0的值时一直失败 但是在单片机启动时&#xff0c;写寄存器0时&#xff0c;值能正确写入&#xff0c;并正确读出&#xff0c;之后写完读取出的都是FF或其他异常值…

CobaltStrike后渗透进阶篇

0x01 网络钓鱼攻击 钓鱼攻击简介 钓鱼攻击主要通过生成的木马诱使受害者运行后上线&#xff0c;其中木马一般都伪装成正常的程序。与此同时配合钓鱼网站可帮助攻击者模拟真实网站诱骗受害者访问&#xff0c;达到获取账号密码、上线木马等目的。接下来主要介绍后门程序的生成及…

利用Python爬取天气数据并实现数据可视化,一个完整的Python项目案例讲解

要使用Python爬取天气数据并进行制图分析分几个步骤进行&#xff1a; 选择数据源&#xff1a;首先&#xff0c;你需要找到一个提供天气数据的API或网站。一些常见的选择包括&#xff1a;OpenWeatherMap、Weatherbit、Weather Underground等。 安装必要的库&#xff1a;你需要安…

mamba模型原理解读

本文主要讲解我对于2023年提出的mamba模型的理解和解读&#xff0c;mamba模型的提出为transformer模型存在的计算效率低下&#xff0c;需要大量时间运行程序提出了解决方案。提高了模型的运行效率和计算效率。我主要是根据下面这篇文章入手&#xff1a; 1.mamba模型是通过堆叠多…

SpringBoot调用WebService的实践

作者所在公司的系统间的信息交互是通过webservice完成。如&#xff1a;MES与SAP的交互&#xff0c;MES与WMS的交换&#xff0c;MES与SRM的交互&#xff0c;MES与IOT的交互等。 MES是用.NET VS2008 C#写的&#xff0c;调用webservice很简单&#xff0c;这里不再赘述。如有想了解…