主要的内存管理方法
主要针对堆内存的管理。
- 手动管理(c/c++),容易触发内存安全问题,以及内存泄露。
- 自动管理(GC,java/golang),运行时对性能有影响,并不能完全避免内存泄露。
- 运行时使用 Drop trait 来回收资源,利用所有权规则在编译期间避免内存安全问题。
内存安全:
- 悬垂指针,指向内存已经被释放。
- 空指针。
Option<T>
避免了空指针。 - 未定义内存。编译器确保所有分配内存的变量都完成了初始化。
- 缓冲区溢出。
- 非法释放未分配的指针或者已经被释放的指针。
通用概念
- 栈,栈帧,ESP,EBP。
- 堆。堆分配算法,空闲链表和位图标记。
- jemalloc,tcache -> arena -> system。
- golang 中的内存管理?
- 内存对齐。
Rust 中的内存管理
- 检测未初始化变量。
- 栈内存的自动释放。
- 堆内存的自动释放。
- 智能指针和 RAII
- Deref 和 Drop trait。
- 智能指针和 RAII
- 内存泄露
- 线程崩溃,Drop 没有被调用。
- 循环引用。
- 主动调用 forget,主要与 FFI 相关。
有疑问加站长微信联系(非本文作者)