我是否正确地假设唯一“放慢速度”的事情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(使用前将#替换为@)