C语言中(a+b)*c与a*c+b*c的计算速度对比问询
关于(a+b)c与ac+b*c的运算速度对比
先给结论:取决于编译器是否开启优化,分两种情况看:
无编译器优化的场景
从指令次数看,(a+b)*c只需要1次加法+1次乘法,而a*c + b*c需要2次乘法+1次加法。因为乘法的时钟周期确实比加法长,所以这种情况下(a+b)*c的运算速度会更快。开启编译器优化的场景
现代C语言编译器(比如GCC、Clang)在-O1及以上优化级别下,会自动识别a*c + b*c这种形式,通过代数变换把它转换成(a+b)*c的等价形式,最终生成的机器指令完全一致。这时候两个表达式的运算速度没有任何区别。
额外要注意的特殊情况:
如果a、b、c的取值导致a+b发生溢出,但a*c和b*c单独计算不会溢出,那两个表达式的结果会不一样,这时候就不存在速度对比的意义了——结果都不同,比速度没价值。
实际开发中建议:
不用刻意为了这点性能差异调整代码写法,优先保证代码的可读性。如果是对性能极度敏感的场景,可以查看编译器生成的汇编代码确认优化情况,或者手动写成更直观的形式。
内容的提问来源于stack exchange,提问作者royal grasshopper
相关产品推荐
相关产品推荐

