Rust基础01-初见所有权
初见所有权
所有权是 Rust 最独特的特性,它让 Rust 无需 GC(垃圾收集器)就可保证内存安全
-
什么是所有权
Rust 的核心特性就是所有权,所有程序在运行时都必须管理它们使用计算机内存的方式
有些语言有垃圾收集机制,在程序运行时,它们会不断地寻找不再使用的内存
有些语言中,程序员必须显式地分配和释放内存
-
Rust 对内存管理时:
内存通过一个所有权系统管理,其中包含一组编译器在编译时检查的规则,当程序运行时,所有权特性不会减慢程序的运行速度
-
-
Stack & Heap (栈内存 与 堆内存)
对于 Rust 这种系统级编程语言,一个值是在 Stack 还是 Heap 上对语言的行为和你为什么要做某些决定有更大影响
在程序运行时,Stack 和 Heap 都是可用的内存,但它们的结构很不同
-
存储数据:
-
Stack:
按值的接收顺序来存储,按相反的顺序移除(后进先出,LIFO)添加数据叫 压入栈,移除数据叫弹出栈
所有存储在 Stack 上的数据必须拥有已知的固定的大小
-
Heap:
当将数据放入 Heap 时,会请求一定数量的空间(内存组织性较差)
操作系统在 Heap 里找到一块足够大的空间,把它标记为在用,并返回一个指针,也就是这个空间的地址
此过程叫做 在 Heap 上进行分配,有时仅称为"分配"
适合存储 大小未知的数据 或 运行时大小可能发生变化的数据
-
其他:
-
-
访问数据:
-
函数调用:
当你的代码调用函数时,值被传入函数(也包括指向 Heap 的指针)函数本地的变量被压倒 Stack 上,当函数结束时,这些值会从 Stack 上弹出
-
-
所有权解决的问题:
- 追踪代码的哪些部分正在使用 Heap 的哪些数据
- 最小化 Heap 上的重复数据量
- 清理 Heap 上未使用的数据以避免空间不足