[英]Why is byte map faster than bit map?
我讀過“垃圾收集手冊”。 它說當做卡表時,他們使用字節圖而不是位圖,並說它比位圖更快,是否是由於高速緩存線? 但正如我所知,緩存行通常是64字節,如果我們對字節進行更改,競爭爭用仍然存在,其他cpu仍會使該行無效,它與位圖相同,任何人都可以幫助我嗎?
不確定我是否正確上下文,但總的來說:
位圖訪問
需要地址操作和讀寫整個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中,則會浪費內存空間。
因此,除非你得到專門用於處理位圖和平面的硬件 ,否則BYTE貼圖會更快...但是對於每個規則都有一個例外,因此有些算法你已經獲得了掩碼地址和位掩碼,在這種情況下位圖是比字節映射更快或更快......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.