我是否需要担心“Rc”的开销?

2024-01-13

我是否正确地假设唯一“放慢速度”的事情Rc问题是它会在对象删除时检查是否释放该对象?除此之外,取消引用的开销是“多少”Rc,即我应该关心它吗?
这两个函数几乎同样快吗?或者说速度上有明显的区别吗?

fn test_with_box() {
    let b = Box::new(1.0);
    let x = b * 2;
}

fn test_with_rc() {
    let rc = Rc::new(1.0);
    let x = rc * 2;
}

由于引用的对象在test_with_rc()总是只有一个引用并且行为就像Box在该功能中(当然,从外部而不是内部来看)。

我怀疑Rc实际上比我想象的要快。

PS:当谈论“快速”时,我指的是取消引用和分配/取消分配。


Rc<T>非常非常便宜。它并不像T相当多(装箱值在微观优化方面相对昂贵),但效率几乎不低于Box<T>.

就像Box,但是对于强引用计数和弱引用计数还有额外的几个词,唯一需要触及的是创建一个Rc(初始化值),克隆Rc(增加引用计数),删除Rc(减少引用计数并运行析构函数(如果适用)),以及降级到/升级Weak(两个重新计数中的一个递增,另一个递减)。

取消引用是一个简单的内存操作,就像Box.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我是否需要担心“Rc”的开销? 的相关文章

随机推荐

  • 应用程序审核链接不再有效

    与许多其他开发人员一样 我的应用程序中有一个链接 用户可以通过该链接在应用程序商店中查看我的应用程序 评价 评论此应用程序 的应用程序商店链接 https stackoverflow com questions 3124080 app st
  • 对 Arrays.asList() 中的列表进行排序也会更改原始数组吗?

    在对检索到的列表进行排序时 我注意到一个奇怪的行为 对我来说 Arrays asList 看来之后Collections sort list 原数组也已排序 这怎么可能 List
  • Python/OpenCV - 在 OpenCV 中使用两种不同的霍夫线方法检测网球场中的线 - 获得不同的结果

    我正在尝试使用 openCV 和霍夫变换检测网球场中的线 我想找到水平线和垂直线 以便找到交点并最终检测网球场的角落 Here the original image 但我有一些问题 1 我尝试使用 HoughLineP 这里的代码 gray
  • 从 QuickTime(电影)文件中获取缩略图

    有人知道是否有可能 在 PHP 中 从服务器上的 Quicktime 电影中获取帧 缩略图 类似于通常的 GD 缩略图生成 但适用于 mov 文件 注意 我使用的是 dreamhost 因此我只能通过 Web 面板访问服务器 这看起来很有希
  • 登录页面是否需要防伪令牌?

    我不断看到在标准用户名 密码登录页面上放置防伪令牌的代码示例 甚至 Asp Net Web 项目模板也能做到这一点 为什么 唯一改变的系统状态是用户的登录状态 为了实现这一点 攻击者需要他们的用户名和密码 这意味着一切都已经受到最大程度的损
  • 需要帮助根据真值表创建二叉树

    首先 为了充分披露 我想指出这与机器学习课程中的作业有关 这个问题不是家庭作业问题 而是我需要解决的问题 以便完成创建 ID3 决策树算法这一更大的问题 当给定真值表时 我需要生成类似于以下内容的树 let learnedTree Node
  • 将数字截断至小数点后两位而不进行四舍五入

    假设我的值为 15 7784514 我想将其显示为 15 77 不进行舍入 var num parseFloat 15 7784514 document write num toFixed 1 br document write num t
  • 如何在没有选择按钮的情况下在GridView中实现全行选择?

    我正在实现一项功能 当用户按下 GridView 中行中的任何点时 将选择该行而不是 选择 按钮 为了实现这一点 我使用以下代码 protected void GridView1 RowDataBound object sender Gri
  • 动态创建文件输入元素

    我想自定义文件输入按钮 所以我使用此代码创建一个文件输入元素 function inputBtn var input document createElement input input type file setTimeout funct
  • TensorFlow:如何根据历元设置学习率衰减?

    学习率衰减函数tf train exponential decay需要一个decay steps范围 每隔一段时间降低学习率num epochs 你会设置decay steps num epochs num train examples b
  • Apache、SSL 客户端证书、LDAP 授权

    我在 serverfault com 上发布了这个问题 但没有答案 所以我在这里尝试 是否可以混合 mod ssl 和 mod auth ldap 以便使用客户端证书进行身份验证并使用 mod auth ldap 进行授权 需要 ldap
  • javax.servlet.ServletException:包装器找不到 servlet 类

    我已经从 Jasper Reports for Java Developer 第 3 章 中制作了一个 servlet 它将在浏览器上显示 Jasper Report 该 Servlet 如下所示 public class FirstRep
  • 如何抑制 Visual Studio 2017 (C#) 中的初始构建后事件错误?

    我在 Visual Studio 2017 中有一个 C 解决方案 我还有一个名为的批处理脚本foobar bat其中包含以下代码 echo foobar error 1 This is a test error 我的目标是得到only当我
  • new之后直接调用方法?

    PHP 是否允许像这样调用新对象的方法 new CEntry new Control gt actuate 我可以传递一个新对象作为参数 如下所示new Control 然而 它似乎不喜欢 actuate 调用 我收到错误 Parse er
  • 如何使用 C++ 中具有多个参数的 if 语句调用多个函数

    该程序针对每种条件运行所有函数 而它应该只针对每种条件运行一个函数 为什么 我应该编写计算球体 圆柱体和圆锥体的体积和表面积的函数 我无法弄清楚是 if 语句弄乱了 还是函数本身弄乱了 该程序的理想输出如下 选择形状 1 球体 2 圆柱体
  • 从 node-mysql 连接到 Amazon RDS (MySQL) 时出错

    我正在尝试使用 felixge node mysql 包从 Lambda 中托管的 Nodejs 代码连接到我的 Amazon RDS MySQL 实例 我需要帮助来找出我做错了什么 我收到 连接 ETIMEDOUT 错误 我的代码托管在
  • 不同源文件中的 D 模板特化

    我最近问this https stackoverflow com questions 6328444 type classes in d有关如何在 D 中模拟类型类的问题 并建议了一种使用模板专业化来实现此目的的方法 我发现 D 无法识别不
  • 基于不同XAML的样式继承

    如何将样式中的 BasedOn 标记指定为在其他文件中定义的样式 Example Dictionary1 xaml 定义 在 Dictionary2 xaml 中我需要类似的东西
  • 从 pandas 数据框中删除闰年日

    我有福尔 数据框 datetime 2012 01 01 125 5010 2012 01 02 125 5010 2012 01 03 125 5010 2012 02 04 125 5010 2012 02 05 125 5010 20
  • 我是否需要担心“Rc”的开销?

    我是否正确地假设唯一 放慢速度 的事情Rc问题是它会在对象删除时检查是否释放该对象 除此之外 取消引用的开销是 多少 Rc 即我应该关心它吗 这两个函数几乎同样快吗 或者说速度上有明显的区别吗 fn test with box let b