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

非常好的Rust自动管理内存的例子

1.核心机制:所有权系统 (Ownership System)

A.所有权规则

fn main() {// 规则 1: 每个值都有一个所有者let s1 = String::from("hello");  // s1 是 "hello" 的所有者// 规则 2: 同一时间只能有一个所有者let s2 = s1;  // 所有权转移到 s2,s1 不再有效// println!("{}", s1);  // ❌ 编译错误!s1 已失效println!("{}", s2);     // ✅ s2 是新的所有者// 规则 3: 当所有者离开作用域,值被自动释放
}  // s2 在这里离开作用域,内存自动释放(调用 drop)

B.Drop trait - 自动析构

struct MyData {data: Vec<u8>,
}impl Drop for MyData {fn drop(&mut self) {println!("释放 MyData,大小: {} bytes", self.data.len());// Vec 的 drop 会自动调用,释放内存}
}fn main() {{let data = MyData {data: vec![0; 100],};println!("MyData 创建");}  // 作用域结束,自动调用 dropprintln!("MyData 已释放");
}

输出:

MyData 创建
释放 MyData,大小: 100 bytes
MyData 已释放

2. 内存管理的三种方式

A. 栈分配(编译时已知大小)

fn main() {let x = 42;           // 栈上let y = [1, 2, 3];    // 栈上let z = (10, 20);     // 栈上// 函数结束,栈自动清理
}

B. 堆分配(运行时动态大小)

fn main() {// String 在堆上分配let s = String::from("hello");// Vec 在堆上分配let v = vec![1, 2, 3, 4, 5];// Box 在堆上分配let b = Box::new(42);println!("栈上的指针: {:p}", &s);println!("堆上的数据: {:p}", s.as_ptr());// 作用域结束,Drop trait 自动调用,释放堆内存
}

C. 借用(不转移所有权)

fn print_length(s: &String) {  // 借用,不获取所有权println!("长度: {}", s.len());
}  // 不释放,因为不是所有者fn main() {let s = String::from("hello");print_length(&s);  // 借用println!("{}", s); // ✅ s 仍然有效
}  // s 在这里释放
http://www.dtcms.com/a/575252.html

相关文章:

  • 昆明响应式网站制作网站建设插件
  • 站长素材音效下载极速网站建设定制多少钱
  • CATASTROPHIC FAILURE OF LLM UNLEARNING VIA QUANTIZATION
  • 医院门户网站模板网站设置受信任
  • 网站简历一个ip地址上可以做几个网站吗
  • Avalonia 使用ItemsControl示例以及问题记录
  • 建设部网站公示钦州公租房摇号查询无锡手机网站开发
  • 公司网站内容相近为什么要给企业建设网站?
  • wordpress 仿微博福州网站seo推广优化
  • 网站建设行业发展史网站源码下载安全吗
  • 自己做视频网站资源从哪里来沈阳市城乡建设网站
  • 注意力机制:Jointly Learning to Align and Translate中从双向RNN编码器到软对齐的完整流程
  • 关键词排名点击软件网站信息产业部icp备案中心网站
  • NLP-常见任务
  • 娄底市建设银行宣传部网站胶州网站设计公司
  • 网站开发前景好吗商丘企业网站建设公司
  • 建设银行网站wordpress绑定二级域名插件
  • 自己怎么拍做美食视频网站详情页设计模板图片
  • 【设计题】如何涉及一个高并发的计数器
  • 网站开发教程 布局长域名转换短域名
  • 通过Ollama搭建本地LLM
  • 《新概念英语青少年版》单词全整理
  • 好的建筑设计网站有没有什么好看的网址
  • 8、webgl 基本概念 + 图像变换(平移 + 旋转 + 缩放)
  • 郑州建设信息网站环球网最新国际新闻
  • 租赁公司网站源码上线吧做的网站可以备案
  • 手机网站开发解决方案如何将自己做的网页做成网站
  • 在JavaScript中,将包含HTML实体字符的字符串转换为普通字符
  • 网站 建设理由网页设计教程详细步骤ppt
  • 深入理解 Python 的“左闭右开”设计哲学