передаётся через стек процессора (инструкции push и pop)
либо через динамическую память
fn give_str() -> String {
String::from("callee")
}
fn give_str(hidden_caller_target_ref: &mut String) {
*hidden_caller_target_ref = String::from("callee");
}
fn main {
let mut s = String::from("caller");
s = give_str();
}
fn main {
let mut s = String::from("caller");
give_str(&mut s);
}
let mut b = [0; 29999999];
let mut a: Vec<i64> = b.to_vec();
ты был прав, стек порвался. А почему кучу надо очищать? Разве когда у вектора заканчивается lifetime, на него не вызывается drop (drop вроде вычищает heap, не?)? Я проверил твою теорию про heap 2-ым пробегом функции с этим вектором, и отожрало столько же памяти, как и 1-им пробегом. Если бы heap не очистился 2-ой вектор бы поверх старого не записывался ::
. Видео: https://www.youtube.com/watch?v=SqT5YglW3qU&t=34