Rust 内存管理

西门早柿 · · 654 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

主要的内存管理方法

主要针对堆内存的管理。

  • 手动管理(c/c++),容易触发内存安全问题,以及内存泄露。
  • 自动管理(GC,java/golang),运行时对性能有影响,并不能完全避免内存泄露。
  • 运行时使用 Drop trait 来回收资源,利用所有权规则在编译期间避免内存安全问题。

内存安全:

  • 悬垂指针,指向内存已经被释放。
  • 空指针。Option<T> 避免了空指针。
  • 未定义内存。编译器确保所有分配内存的变量都完成了初始化。
  • 缓冲区溢出。
  • 非法释放未分配的指针或者已经被释放的指针。

通用概念

  • 栈,栈帧,ESP,EBP。
  • 堆。堆分配算法,空闲链表和位图标记。
    • jemalloc,tcache -> arena -> system。
    • golang 中的内存管理?
  • 内存对齐。

Rust 中的内存管理

  • 检测未初始化变量。
  • 栈内存的自动释放。
  • 堆内存的自动释放。
    • 智能指针和 RAII
      • Deref 和 Drop trait。
  • 内存泄露
    • 线程崩溃,Drop 没有被调用。
    • 循环引用。
    • 主动调用 forget,主要与 FFI 相关。

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:西门早柿

查看原文:Rust 内存管理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

654 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传