我读过“垃圾收集手册”。它说当做卡表时,他们使用字节图而不是位图,并说它比位图更快,是否是由于高速缓存线?但正如我所知,缓存行通常是64字节,如果我们对字节进行更改,竞争争用仍然存在,其他cpu仍会使该行无效,它与位图相同,任何人都可以帮助我吗?
答案 0 :(得分:0)
不确定我是否正确使用了上下文,但总的来说:
位图访问
需要地址操作和读写整个BYTE / WORD / ...因为大多数架构不支持位读/写内存访问。
对于8位位图,如:
BYTE map[];
读取的代码是:
readed_bit=(map[bit>>3]>>(bit&7))&1;
组:
map[bit>>3]|=1<<(bit&7);
明确:
map[bit>>3]&=255^(1<<(bit&7));
其中bit
是您要访问的位。如您所见,需要进行掩蔽和位移。
BYTE地图访问
可以在大多数架构上直接访问
readed_byte=map[byte];
组:
map[byte]=1;
明确:
map[byte]=0;
byte
是您想要访问的BYTE。正如您所看到的,如果只是布尔值存储在单个BYTE中,则会浪费内存空间。
因此,除非你得到专门设计用于位图和平面的 HW ,否则BYTE贴图会更快......但是对于每个规则都有一个例外,所以有一些算法你已经掩盖了在这种情况下,地址和位掩码位图比字节映射更快或更快......