rust clone()与Rc还是Arc?[关闭]

问题描述 投票:0回答:1

我想了解一下使用Arc和克隆Arc之间的利弊。

  • 使用Arc和克隆Arc之间的利弊(我在不同的地方使用Something)

  • 使用Something.clone()(我的Something结构只有1个字段,已经可以克隆了)

除了衡量和比较性能结果外,我不认为两者中的任何一个在性能上会差很多,我想了解什么是锈人心目中的 "普遍更好 "或 "更习惯"。

如果我的理解没错的话。

  • 弧线和克隆 我在堆上有一个东西(比堆栈贵)+我在克隆Arc(比Rc.clone贵,但如果我需要跨线程使用,就需要) 所以我根据克隆的次数,创建了N个Arc。

  • Something.clone。我在堆栈上创建了N个Something的实例,取决于我克隆的次数。

在这种情况下("Something "的创建成本很低),用Arc包装与直接克隆它有什么好处吗?这两个选项中的任何一个是可取的吗?

rust clone automatic-ref-counting
1个回答
1
投票

在这种情况下("Something "的创建成本很低),用Arc包装和仅仅克隆它有什么好处吗?

如果你真的只是有一个 Arc<Something> 而你又要克隆它,那么可能不会。如果你想在线程之间共享某些东西,而且所有权不明确,那么弧线是必要的,通常你会希望在 refcount 里面有某种锁来允许修改共享项目。

虽然在某些情况下,没有锁也可以很有用,比如内部对象不能(因为它是唯一的)或者不应该(因为它很贵)被复制,并且需要(不可改变的)被多个线程使用(所以你使用Arc作为共享单个实例的一种方式),或者它有时被复制(而且很贵),但一般不会被复制,在这种情况下,与其创建急切的副本,你可以 make_mut 当需要 "拆分 "Arc,但将额外的分配推迟到那个时候。

© www.soinside.com 2019 - 2024. All rights reserved.