我正在分析使用dynamic_bitset<>
的一些代码,并且我发现我的瓶颈发生在count()
函数中,需要在for循环中调用数百万次。简而言之,for循环使用成对的位集,使用&
计算集合交集,然后使用count()
保存汉明权重。
为了与STL中的常规<bitset>
进行比较,我将bitset实现为长数组,并使用__builtin_popcountl()
(在<bitset>
中使用),并找到它慢得多 - 大约慢了50%。有没有人看过do_count()
中{@ 1}}功能,因为它使用了一些我根本不了解的查找表。
为了更清楚,我的问题是为什么Boost <boost/detail/dynamic_bitset.hpp>
比do_count()
效率更高?