今天看啥  ›  专栏  ›  西门早柿

Rust 内存管理

西门早柿  · 简书  ·  · 2021-02-14 23:00

主要的内存管理方法

主要针对堆内存的管理。

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

内存安全:

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

通用概念

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

Rust 中的内存管理

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



原文地址:访问原文地址
快照地址: 访问文章快照