假设我有
x &(num-1)
其中x是无符号长long,num是常规int和&是按位和运算符。
随着num值的增加,我的速度明显降低。这是正常的行为吗?
这些是受影响的代码的其他部分
int* hash = new int[num]
答案 0 :(得分:2)
我不认为按位操作正在减慢,我认为你已经使用了很多次。而且可能它甚至不是按位操作花费太长时间,而是其他任何你也做了更多次。
使用分析器。
答案 1 :(得分:2)
如果你在紧密循环中执行代码,那么你可能会看到性能会减少更高的num得分,我猜测你的C ++编译器不能找到一个本地指令来执行&一个无符号的长整数 - 正如你所说的那样,每增加一个2的幂就会减速,那么我期望得到的代码来自&重复“将num”除以2,直到它为零并逐位执行。
另一种可能性是你正在运行的CPU很蹩脚,并且在固定的周期内没有执行AND。
答案 2 :(得分:0)
问题解决了。它与CPU缓存和位置有关。