Ho ragione di presumere che l'unica cosa che "rallenta" Rc
s è che controlla se rilasciare l'oggetto quando cade? Oltre a ciò, "quanto" è il sovraccarico del dereferenziamento a Rc
, cioè dovrei preoccuparmene?
Queste due funzioni sono quasi altrettanto veloci? O c'è una notevole differenza di velocità?Devo essere preoccupato per il sovraccarico di `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;
}
Poiché l'oggetto di riferimento in test_with_rc()
sempre ha un solo riferimento e si comporta come un Box
a quella funzione (vista dall'esterno, non internamente, ovviamente).
Ho il sospetto che gli Rc
s siano effettivamente più veloci di quanto penso.
PS: Quando si parla di "veloce" intendo sia il dereferenziamento che l'allocazione/deallocazione.
Come sempre con le domande sulle prestazioni, l'unico modo per sapere è profilare in-situ. I micro-benchmark non sono adatti. –