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>

相关推荐
程序员卷卷狗9 分钟前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm
lly20240641 分钟前
ASP Folder:深入解析其功能与使用技巧
开发语言
雪域迷影1 小时前
Go语言中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·后端·http·golang·get
Liudef061 小时前
DeepseekV3.2 实现构建简易版Wiki系统:从零开始的HTML实现
前端·javascript·人工智能·html
景早3 小时前
vue 记事本案例详解
前端·javascript·vue.js
人工智能的苟富贵3 小时前
Rust 异步编程实践:用 Tokio 实现一个迷你 HTTP 服务
ubuntu·http·rust
ysdysyn3 小时前
C# 进程管理实战:检查与启动EXE程序的完整指南
开发语言·c#
极限实验室3 小时前
搜索百科(6):Meilisearch — Rust 打造的轻量级搜索新锐
搜索引擎·rust
IDOlaoluo3 小时前
PHP-5.2.1.tar.gz 离线安装教程:从源码编译到配置的详细步骤(附安装包)
开发语言·php
wangjialelele4 小时前
Qt中的常用组件:QWidget篇
开发语言·前端·c++·qt