20-30 年前,除法等算术运算是 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;
?