rust内存分配,内存回收,内存泄露

embedded/2024/9/23 0:24:43/

内存泄露

首先我们先来讲内存泄露,rust中有两种方式可以造成内存泄露。

  • 循环引用
    如下的代码执行之后我们在控制台与系统监视器中监控进程执行过程,测试路程如下。
  1. 首先在控制台打印main function start的时候内存还未分配太多,索引进程占用内存还是很小的。
  2. 等到空太太打印start add mem以后,可以看到系统监视器中进程内存占用增加到了30多MB。
  3. 但是看到outside stack_alloc打印到控制台的时候并未在系统监视器中看到内存的释放,代表内存泄露了,并且drop函数也并未执行。
    总结:本来在函数mem_alloc执行过后就应该回收内存了,第一:栈空间的回收,第二:堆空间的回收。由于我们使用了智能指针,内存大多分配在了堆空间,但是堆空间未回收是因为出现了循环引用。当我们把其中cur_node.borrow_mut().next = Some(first_node.clone());注释掉再次执行的时候就会看到内存的释放了
rust">use std::cell::RefCell;
struct 

http://www.ppmy.cn/embedded/50946.html

相关文章

鸿蒙原生App开发之:套用混合app开发思路

2024年,似乎华为迎来了新的企业机遇--鸿蒙独立操作系统。 受到全球国际形势的影响,加之第四次科技革命(AI革命)冷不丁的出现,在他国AI技术领先的前提下,中国自主研发的独立操作系统再次提上新的战略高度。…

mysql手工命令备份与自动备份

1、手工备份数据库数据 进入命令目录:cd /usr/local/mysql/bin,确保该目录下有mysqldump 然后在命令行 输入 mysqldump -u root -p dbname > dbname_backup_20240612.sql 注意,这里的dbname 是指你想要备份的数据库的名字。 通过这个命…

自监督分类网络:创新的端到端学习方法

现代人工智能的快速发展中,分类任务的高效解决方案一直备受关注。今天,我们向大家介绍一种名为Self-Classifier的全新自监督端到端分类学习方法。由Elad Amrani、Leonid Karlinsky和Alex Bronstein团队开发,Self-Classifier通过优化同一样本的…

基于可视化设计的低代码开发分析与应用探讨

随着数字化时代的到来,越来越多的企业开始关注低代码开发。低代码开发作为一种快速应用开发模式,能够显著提高企业生产力。本文以可视化设计为核心,对低代码开发的原理、技术架构、应用场景及挑战进行分析,旨在为我国低代码产业的…

『FPGA通信接口』LVDS接口(4)LVDS接收端设计

文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述 接收端的传输模型各个属性应该与LVDS发送端各属性一致,例如,如果用于接收CMOS图像传感器的图像数据,则接收端程序的串化因子、通道个…

xss-lab靶场的level15-level20

这一部分后面四个全部是flash的xss漏洞 建议先了解一下这一漏洞详情Flash XSS 漏洞详解 根治的好办法-CSDN博客 然后记得在自己浏览器上下载一个flash插件 level15 window.location.href"level16.php?keywordtest"; 但是输入keyword没啥用 于是查看源代码发现 &l…

【C语言】解决C语言报错:Buffer Overflow

文章目录 简介什么是Buffer OverflowBuffer Overflow的常见原因如何检测和调试Buffer Overflow解决Buffer Overflow的最佳实践详细实例解析示例1:字符串操作不当示例2:数组访问越界示例3:未检查输入长度示例4:使用不安全的函数 进…

Docker-Portainer可视化管理工具

Docker-Portainer可视化管理工具 文章目录 Docker-Portainer可视化管理工具介绍资源列表基础环境一、安装Docker二、配置Docker加速器三、拉取Portainer汉化版本镜像四、运行容器五、访问可视化界面 介绍 Portainer是一款开源的容器管理平台,它提供了一个直观易用的…