使用位运算符的位运算速度
Speed of bit operations with bit operators
假设我有
x &(num-1)
其中 x 是无符号的长整型长整型,num 是常规 int 和 & 是按位和运算符。
随着 num 值的增加,我的速度显着降低。 这是正常行为吗?
这些是受影响的代码的其他部分
int* hash = new int[num]
我不
认为按位运算变慢了,我认为你使用它的次数更多了。 可能甚至不是按位运算花费的时间太长,而是您执行的其他操作也花费了更多次。
使用探查器。
如果你在一个紧密循环中执行代码,你完全有可能看到性能随着更高的 num 而降低,我猜你的 C++ 编译器无法找到一个本机指令来执行 &与一个无符号的长长 - 正如你所说,你对 2 的每个幂都会变慢,那么我希望由 & 产生的代码反复"将 num"除以 2,直到它零并逐位执行。
另一种可能性是,您运行的 CPU 很糟糕,并且在固定的周期数内无法执行 AND。
问题解决了。 它与 CPU 缓存和位置有关。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- Arduino 上数学运算的计时速度 - 异常
- C++模运算符,使用 #define 和自己的类进行浮点运算
- 矩阵运算C++运算符重载程序错误
- Visual Studio无法在布尔运算的上下文中实例化强制转换运算符模板(T=bool)
- 性能方面,按位运算符与正常模数的速度有多快
- 对象上的后增量与前增量运算符的速度
- C++中比较运算符的速度
- 动态上下文相关运算符的设计模式(例如模运算)
- C语言中If-Else和三元运算符的速度差异
- boost::运算符混合运算
- 重载数组下标 [] 运算符速度慢
- 使用位运算符的位运算速度