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>

相关推荐
newxtc2 分钟前
【JJ斗地主-注册安全分析报告】
开发语言·javascript·人工智能·安全
程序猿小D12 分钟前
第22节 Node.js JXcore 打包
开发语言·人工智能·vscode·node.js·c#
小猫咪怎么会有坏心思呢19 分钟前
华为OD机试-最短木板长度-二分法(A卷,100分)
java·开发语言·华为od
wo32586614525 分钟前
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
开发语言·网络·php
知识中的海王29 分钟前
Python html 库用法详解
开发语言·python
烛阴30 分钟前
告别原生Cookie:js-cookie如何实现Cookie的优雅管理
前端·javascript
Allen Bright31 分钟前
【HTML-16】深入理解HTML中的块元素与行内元素
前端·html
前端卧龙人38 分钟前
受够了webpack的速度,我选择了vite重构vue2项目
前端
巛、1 小时前
ES6面试题
前端·面试·es6
獨枭1 小时前
配置 macOS 上的 Ruby 开发环境
开发语言·macos·ruby