前端搞Rust 第四集 Stack Heap 所有权

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

所有权

  • 所有权是Rust的核心
  • 所有程序载运定时都必须管理他们的使用计算机内存的方式
    • js 有垃圾收集机制
    • 还有其他语言,必须显示的分配和释放内存
  • 再说咱们的rust
    • 内存通过一个所有权系统来管理,,其中编译器在编译时候会检查规则
    • 所有权特性不会减慢程序的运行速度

Stack(栈内存) vs Heap(堆内存)

在常规语言中一个值在堆还是在栈上其实开发人员不敏感,但是在Rust 这种系统级编程语言,值在栈上还是在堆上影响还是很大的

Stack (栈内存)

  • 栈按照值得接收顺序来存储,按想法的顺序取出(后进先出 LIFO)
    • 添加数据叫做入栈
    • 移除数据叫弹出栈
    • 所有存在栈上到额数据都必须是已知固定大小的

src=http___image109.360doc.com_DownloadImg_2021_06_2208_224640763_2_20210622082020553.png&refer=http___image109.360doc.jpeg

Heap(堆内存)

Heap 组织性比较差

  • 数据进入heap时,会请求一定数量的空间
  • 操作系统在heap 找到一块足够大的空间,标记再用,并返回空间地址
  • 这个过程叫做分配

存储数据 对比

  • 因为指针是一直固定大小的,可以把指针放在stack 上.但要是使用实际数据,你必须使用指针来定位
  • 数据入栈要比在堆上分配快很多,因为使用栈,操作系统不需要存储空间,值就在栈顶
  • 堆上分配空间麻烦很多
    • 操作系统要根据数据找到一个足够大的空间,然后做好记录,为了下次访问方便

访问数据 对比

heap上肯定比stack上慢,因为要通过指针才能找到,简历理解 内存需要多转化一次才能获取到数据

所有权存在的原因

  • 跟踪代码在哪里使用了,heap的哪些数据
  • 最小化heap重复数据
  • 清理heap 上未使用的数据,避免空间不足

所有权的存在就是为了管理heap数据,理解heap会帮助我们理解所有权

Supongo que te gusta

Origin juejin.im/post/7066815337374679053
Recomendado
Clasificación