Rust 内存管理


本文摘自网络,作者,侵删。

主要的内存管理方法

主要针对堆内存的管理。

  • 手动管理(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-gin源码(一)

Golang中定义不定长数组的方法

Golang如何防止意外崩溃

一周 Go world 新鲜事

Golang-mysql自定义数据类型

Golang 如何类型转换

Go语言简介

手撸Golang 行为型设计模式 访问者模式

Go三色回收

反射三定律

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...