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>

相关推荐
会豪2 分钟前
工业仿真(simulation)--前端(五)--标尺,刻度尺
前端
会豪3 分钟前
工业仿真(simulation)--前端(四)--画布编辑(2)
前端
中国胖子风清扬5 分钟前
Rust 日志库完全指南:从入门到精通
spring boot·后端·rust·学习方法·logback
an__ya__5 分钟前
Vue数据响应式reactive
前端·javascript·vue.js
苦逼的搬砖工8 分钟前
Flutter UI Components:闲来无事,设计整理了这几年来使用的UI组件库
前端·flutter
想买Rolex和Supra的凯美瑞车主10 分钟前
Taro + Vite 开发中 fs.allow 配置问题分析与解决
前端
ruanCat11 分钟前
使用 vite 的 base 命令行参数来解决项目部署在 github page 的路径问题
前端·github
Codebee16 分钟前
使用Qoder 改造前端UI/UE升级改造实践:从传统界面到现代化体验的华丽蜕变
前端·人工智能
叫我詹躲躲20 分钟前
开发提速?Vue3模板隐藏技巧来了
前端·vue.js·ai编程
华仔啊20 分钟前
面试都被问懵了?CSS 的 flex:1 和 flex:auto 真不是一回事!90%的人都搞错了
前端·javascript