比较(a+b)*c和a*c+b*c的计算速度

roy*_*per 0 c time-estimation computation-theory

我刚刚了解到,C 中的加法运算比乘法运算更快。因此,我很好奇(a+b)*c计算速度是否会比 C 更快a*c+b*c

Lun*_*din 6

我刚刚了解到 C 中的加法运算比乘法运算更快

那是无稽之谈。C 语言本身没有任何东西会影响这一点。哪个更快完全取决于CPU提供的指令集(ISA)。

因此,我很好奇(a+b)*c计算速度是否会比a*c+b*c

无论您在 C 代码中编写哪个版本,优化编译器很可能都会生成相同的机器代码。试试这个代码:

int add1 (int a, int b, int c)
{
  return (a+b)*c;
}

int add2 (int a, int b, int c)
{
  return a*c+b*c;
}
Run Code Online (Sandbox Code Playgroud)

gcc -O3x86_x64 的 13.1 上,我获得了两个版本 100% 等效的汇编代码:

add1:
    lea     eax, [rdi+rsi]
    imul    eax, edx
    ret
add2:
    lea     eax, [rsi+rdi]
    imul    eax, edx
    ret
Run Code Online (Sandbox Code Playgroud)

  • @MikeNakis 这实际上是一个大问题,今天的人们在书面文本中读到各种奇怪的东西,并假设最坏的情况,除非你在最后添加至少 5 个表情符号...... (2认同)