Back to questions
Junior — Middle
56
Можете объяснить, как в Rust осуществляется контроль и распределение памяти?
Answer from AI
sobes.tech AI
В Rust управление памятью основано на системе владения (ownership), заимствований (borrowing) и времени жизни (lifetimes), что позволяет избежать необходимости в сборщике мусора и при этом обеспечивать безопасность памяти.
- Владение (Ownership): Каждый объект в Rust имеет единственного владельца — переменную, которая отвечает за освобождение памяти.
- Заимствование (Borrowing): Можно временно брать ссылку на данные без передачи владения. Заимствования бывают изменяемыми и неизменяемыми, при этом одновременно может быть либо несколько неизменяемых ссылок, либо одна изменяемая.
- Время жизни (Lifetimes): Компилятор проверяет, чтобы ссылки не выходили за пределы времени жизни данных, на которые они ссылаются.
Пример:
fn main() {
let s = String::from("hello"); // s владеет строкой
let r1 = &s; // неизменяемая ссылка
let r2 = &s; // еще одна неизменяемая ссылка
println!("{} and {}", r1, r2);
// let r3 = &mut s; // ошибка: нельзя иметь изменяемую ссылку, пока есть неизменяемые
}
Таким образом, Rust гарантирует безопасность памяти на этапе компиляции без накладных расходов времени выполнения.