Pet*_*lák 5 cpu performance arithmetic-expressions conditional-statements
20 到 30 年前,除法等算术运算是 CPU 成本最高的运算之一。在一段重复调用的代码中节省一个除法是显着的性能提升。但是今天的 CPU 具有快速的算术运算,并且由于它们大量使用指令流水线,条件可能会破坏高效执行。如果我想优化代码以提高速度,我应该更喜欢算术运算而不是条件运算吗?
假设我们要实现模运算n。什么会表现得更好:
int c = a + b;
result = (c >= n) ? (c - n) : c;
Run Code Online (Sandbox Code Playgroud)
或者
result = (a + b) % n;
Run Code Online (Sandbox Code Playgroud)
?
假设我们正在将 24 位有符号数转换为 32 位。什么会表现得更好:
int32_t x = ...;
result = (x & 0x800000) ? (x | 0xff000000) : x;
Run Code Online (Sandbox Code Playgroud)
或者
result = (x << 8) >> 8;
Run Code Online (Sandbox Code Playgroud)
?
所有容易实现的目标都已经被编译器的作者和硬件构建者采摘和腌制了。如果你是那种需要问这样的问题的人,你不太可能能够手动优化任何东西。
虽然 20 年前,相对有能力的程序员可以通过汇编来进行一些优化,但现在它是专家的领域,专门研究目标体系结构;此外,优化不仅需要了解程序,还需要了解它将处理的数据。一切都归结为启发法、不同条件下的测试等。
简单的性能问题不再有简单的答案。