Allocare memoria nello Heap in Rust con Box
Rust di default alloca tutti i valori e funzioni nello Stack.
Appena una variabile/funzione esce dal suo scope, viene cancellata immediatamente e automaticamente.
Questo è uno dei tanti motivi che rende Rust più veloce e sicuro di tanti altri linguaggi.
Ovviamente possiamo sempre usare i pointer e gli smart-pointer per allcoare memoria nello Heap.
Box serve proprio a questo; in sostanza è uno smart-pointer che alloca un valore di tipo T nello Heap.
Appena il box esce dal suo scope, viene cancellato.
Qui sotto vediamo un esempio con qualche commento:
fn main() {
let my_number = 1;
print_item(my_number);
// POSSIAMO LANCIARE DUE VOLTE LA FUNZIONE IN QUANTO LA SECONDA CHIAMATA È UNA COPIA
print_item(my_number);
let my_box = Box::new(1);
// BISOGNA USARE IL clone() PERCHÈ BOX NON È UNA COPIA, E SENZA ANDREBBE IN ERRORE
print_item(my_box.clone());
print_item(my_box);
}
// STAMPA IL VALORE PASSATO COME ARGOMENTO E POI LO CANCELLA DALLA MEMORIA
fn print_item<T: std::fmt::Display>(item: T) {
println!("{}", item);
}
Ovviamente è un esempio basico; con Box possiamo fare molte più cose, ma può esservi di aiuto per iniziare ad usarlo.
Enjoy!
rust box stack heap
Commentami!