20-30年前,诸如除法之类的算术操作是CPU中最昂贵的操作之一。在一个重复调用的代码片段中节省一个除法运算可以显著提高性能。但是今天,由于CPU使用指令流水线,条件语句可能会破坏有效的执行,因此CPU具有快速的算术操作。如果我想优化代码以提高速度,我应该优先考虑算术操作而不是条件语句吗?
示例1
假设我们想要实现模n
的操作,哪种方法更好:int c = a + b;
result = (c >= n) ? (c - n) : c;
或者
result = (a + b) % n;
?
例子2
假设我们正在将24位有符号数转换为32位。哪种方法会更有效:
int32_t x = ...;
result = (x & 0x800000) ? (x | 0xff000000) : x;
或者
result = (x << 8) >> 8;
?
int a = rand()%n,b = rand()%n;
- Ben Voigt