SLP(Chapter 6):内存布局和分配(part 3)垃圾回收

本文深入探讨了内存管理中的垃圾回收,包括动态内存分配的原因、分配器的功能与约束,以及优秀分配器的目标。重点讲解了四种垃圾回收方法:标记清除、复制、引用计数和分代收集,分析了它们的优缺点和实现细节。垃圾回收的优势在于防止内存泄漏,提升程序稳定性,但也存在不可预测的运行时机和潜在的暂停问题。
摘要由CSDN通过智能技术生成

3 垃圾回收

3.1 内存管理机制

什么是空间分配?

分配器提供一组块的内存抽象

为什么动态内存分配?

程序通常不知道数据结构的大小,直到程序实际运行

动态内存分配的类型

  • 显式:malloc free
    C
  • 隐式/自动:应用程序分配,但不释放
    在 Java、Lisp 或 ML 中垃圾回收

垃圾回收特点

  • 自动回收堆分配的存储
  • 隐式内存管理(Java),不用free
  • 延迟处理,仅在需要时才重新组织垃圾回收

分配器

分配器作用/功能
  • 维护进程虚拟内存(称为堆)的区域
  • 将堆保留为各种大小块的集合
  • 显式分配
  • 显式或隐式释放内存
分配器约束
  • 对齐请求 / 相邻分配
  • 无法确定分配内存的大小
  • 立即响应
  • 从可用内存分配
  • 不移动已经分配的内存
优秀分配器的目标:

在这里插入图片描述
在这里插入图片描述
free掉多少内存?

  • 保持块的长度
  • 需要为分配的块提供额外单词
如何实现一个分配器?
0) 怎样表示内存分配?
  • 位图 bitmap:由位组成的一个二进制块
    分配了的和释放了的块都可以表示
    在这里插入图片描述
  • 链表
    存储已分配或可用的内存
    在这里插入图片描述
1)块组织 Block organization:我们如何跟踪自由块?
方法1:隐式空闲列表
	用额外 1 位,以标识是否分配;在块大小的低阶位
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值