Rust-是否使用Rc<T>

Rust的所有权机制,数据允许通过借用的方式,在函数的上下文中传递数据。如果离开数据作用的有效范围,这个借用就会失效,编译就会报错。这也是我们不会将借用(引用)作为函数的返回值的原因。下面的代码编译失败。

rust 复制代码
fn create_note() -> &Note {
  ...
}

要将借用的数据传递出其有效范围,要么实现Copy trait,要么实现Clone trait。

这个时候,如果我们要传递的结构体比较大,那么这里的内存复制成本就会随之升高,性能就会有所损耗。

要解决这个问题,可以使用std::rc::Rc。Rc是Reference Counted的缩写,它在堆上创建数据,其目标是实现数据安全共享。因为Rc的内存是动态在堆上分配的,因此这里也会有一些开销。

这里就回到了主题,是否使用Rc<T>。如果我们使用所有权借用的机制来传递数据,且不会发生数据拷贝,那么建议不使用Rc<T>。如果我们的数据会在不同的上下文中频繁传递,例如,闭包,那么建议使用Rc<T>

相关推荐
门前大桥下.12 小时前
HTML-01我的第一个网页
前端·html
浪客川12 小时前
Android的SystemUI的启动流程简析
android·开发语言
独孤留白12 小时前
从C到Rust:Trait From Into 类型转换
rust
我是大卫12 小时前
【图】React源码解析-从数据结构、依赖追踪机制、值传播与更新触发、以及性能陷阱与优化,深挖useContext的底层原理
前端·react.js·源码
谭光志12 小时前
深入浅出 RAG:用一个可运行的 Demo 讲透完整链路
前端·后端·ai编程
Cobyte12 小时前
使用 JavaScript 实现有限状态机的经典问题
前端·javascript·vue.js
-银雾鸢尾-12 小时前
C#中的抽象类与抽象方法
开发语言·c#
道友可好12 小时前
前端工程师的 AI 时代生存指南
前端·人工智能·后端
doiito12 小时前
【RUST AI】把 TTS 搬进浏览器:kokoroi-rs 的 WASM 实践
ai·rust·架构设计
●VON13 小时前
鸿蒙 PC Markdown 编辑器质量流水线:Web 构建、回归与 Release 门禁
前端·华为·编辑器·harmonyos·鸿蒙