Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1405092
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-10-24 22:07:28

1、bitmap是什么
bitmap即位图的意思,类似于一张由0和1组成的表,这样表每一个位置表示相应约定好的内容。

2、为什么需要使用bitmap
使用bitmap表的原因就是使用有限的数据空间表示更多的数据内容。

3、使用举例
应用场景:当软件大量下发硬件处理相同操作的时候,当下发数据量非常大的时候,频繁的下发这样的IO操作成为了数据流操作的效率瓶颈,可能会造成耗时、耗资源等现象,这个时候可以下发一张bitmap表,表中没一个bit都对应一个具体的数据,这样减少下发数据的次数,从而提高效率。

使用方法:
我们如果想将寄存器或是硬件某些索引位置的数据清除操作,例如将:1,5,9,.....索引的数据内容清除。总之,索引的位置是随机的,但是总大小范围我们是可以确定的,而且都是清除操作并且量很大的时候,就可以使用bitmap来实现。
例如:我们将索引10,20,30,40,50的数据清除,一次下发一个索引清除的话需要5次IO操作,但是我们使用一张128bit的bitmap表的话填完这张表,一次下发就完成了清除操作,效率提升很大。
为什么是128bit而不是100bit呢,主要是方便代码实现,我们知道unsigned int或int型表示32bit,那么int bitmap[4]就可以表示出来了,下面问题就是索引填到bitmap哪个bit,一个int占据32bit,所以手可以确定在bitmap[?],即数组的下标(position)是几,例如索引是index,position=index/32;在第一个整形的32bit中那一个bit呢,这个需要上面和下面协商一致,从左到右或是从右到左均可,这里以从又到左为例;偏移为offset=index%32;
bitmap[position] = bitmap[position] | (0x01<
阅读(1115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~