Ownership
- 1 min- Rust 中的所有权是如何管理内存的?提到了哪三种流派?
- 为什么在 Rust 中需要区分栈和堆?它们之间有什么区别?
- 什么是悬空指针(Dangling Pointer)?为什么它是一个内存安全问题?
- Rust 中的所有权规则是什么?请列举并解释每条规则。
- 在 Rust 中,什么是深拷贝和浅拷贝?举例说明它们之间的区别。
2. 为什么在 Rust 中需要区分栈和堆?它们之间有什么区别?
stack
固定size, 用来存放数字,布尔
heap
不固定size, 用来存放string, struct
- 每次往里面放东西的时候, 都需要申请内存空间
- 申请到空间之后, 会把这个内存空间标记为已经使用, 并且返回一个指针表示内存地址
3. 什么是悬空指针(Dangling Pointer)?为什么它是一个内存安全问题?
悬空指针: 类似objective-c里面的野指针, 是指指向已经释放的内存地址的指针。
- 可能导致内存泄露,程序崩溃,数据损坏. 因为可能有两种情况(a. OS已经把这个内存空间分配给别的程序. b.该内存空间没有定义.)
- 难以调试,只有运行到那个位置的时候才会报错
4. Rust 中的所有权规则是什么?请列举并解释每条规则。
- 变量和值是一对一的关系
- 离开作用域, 值会被drop(自动释放)
5. 在 Rust 中,什么是深拷贝和浅拷贝?举例说明它们之间的区别。
深拷贝(内存对象)
复制的时候会复制(内容和指针/引用)
深拷贝通常会涉及到heap上的数据
消耗更多的时间和内存
// deep copy
let s1 = String::from("hello")
let s2 = s1.clone()
浅拷贝(数值/布尔)
只复制(指针/引用)
多个变量会指向同一片内存
// shallow copy
let x = 5
let y = x