位图Bitmap
用单个比特表示一个位置的状态或集合成员资格。
- 核心约束
- 比特与被跟踪对象或区域存在确定映射。
- 适用问题
- 稠密整数集合、CPU 集合、脏块跟踪。
- 边界与取舍
- 稀疏大值域可能浪费空间;粒度影响精度。
常见操作#
U 为值域大小,w 为机器字位数;这是未压缩位图。
| 操作 | 时间复杂度 | 条件与说明 |
|---|---|---|
| 测试 / 设置 / 清除一个位 | 固定宽度索引可直接定位字和位。 | |
| 并集 / 交集 / 差集 | 逐机器字进行位运算,尾部不足一字需掩码处理。 | |
| 计数 / 扫描全值域 | 假定单字 popcount 或位扫描是常数成本;输出所有成员还需 。 | |
| 初始化 / 清空 | 写零所有存储字;惰性清理是另一种实现。 |
时间与空间#
- 时间复杂度
- 单点 ;集合运算
- 存储空间
- 位
按值域分配,稀疏大值域可能浪费空间;Roaring 等压缩位图需独立分析。
工程中的应用#
3 个案例 · 附源码QEMU dirty bitmap 为磁盘区间记录是否被写入,使增量备份能够只复制发生变化的范围。
附源码片段 · 存储与数据放置
libvirt 将 vCPU 允许使用的宿主 CPU 集合表示为位图,并转换为运行时亲和性配置。
附源码片段 · 调度与资源分配
Linux 普通定时器把较近超时放进细粒度槽,远期超时放进粗粒度槽,使用位图寻找待处理槽。v6.12 的这套时间轮不再逐层级联迁移。
附源码片段 · 调度与资源分配