Имею ли я право предположить, что единственное, что «замедляет» Rc
s, заключается в том, что он проверяет, следует ли освобождать объект при его удалении? Кроме того, «сколько» является накладными расходами на разыменование 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
s на самом деле быстрее, чем я думаю.
PS: Когда речь идет о «быстрой», я имею в виду как разыменование, так и выделение/освобождение.
Как всегда с вопросами о производительности, единственный способ узнать - это профиль его на месте. Микро-тесты не подходят. –