Rust基础01-初见所有权

初见所有权

所有权是 Rust 最独特的特性,它让 Rust 无需 GC(垃圾收集器)就可保证内存安全

  • 什么是所有权

    Rust 的核心特性就是所有权,所有程序在运行时都必须管理它们使用计算机内存的方式

    有些语言有垃圾收集机制,在程序运行时,它们会不断地寻找不再使用的内存

    有些语言中,程序员必须显式地分配和释放内存

    • Rust 对内存管理时

      内存通过一个所有权系统管理,其中包含一组编译器在编译时检查的规则,当程序运行时,所有权特性不会减慢程序的运行速度

  • Stack & Heap (栈内存 与 堆内存)

    对于 Rust 这种系统级编程语言,一个值是在 Stack 还是 Heap 上对语言的行为和你为什么要做某些决定有更大影响

    在程序运行时,Stack 和 Heap 都是可用的内存,但它们的结构很不同

    1. 存储数据:

      • Stack

        按值的接收顺序来存储,按相反的顺序移除(后进先出,LIFO)添加数据叫 压入栈,移除数据叫弹出栈

        所有存储在 Stack 上的数据必须拥有已知的固定的大小

      • Heap

        当将数据放入 Heap 时,会请求一定数量的空间(内存组织性较差)

        操作系统在 Heap 里找到一块足够大的空间,把它标记为在用,并返回一个指针,也就是这个空间的地址

        此过程叫做 在 Heap 上进行分配,有时仅称为"分配"

        适合存储 大小未知的数据 或 运行时大小可能发生变化的数据

      • 其他

        Stack VS Heap

    2. 访问数据:

      内存访问

    3. 函数调用:

      当你的代码调用函数时,值被传入函数(也包括指向 Heap 的指针)函数本地的变量被压倒 Stack 上,当函数结束时,这些值会从 Stack 上弹出

  • 所有权解决的问题:

    1. 追踪代码的哪些部分正在使用 Heap 的哪些数据
    2. 最小化 Heap 上的重复数据量
    3. 清理 Heap 上未使用的数据以避免空间不足

posted on 2022-03-13 11:32  Baby091  阅读(33)  评论(0编辑  收藏  举报

导航