我刚刚学到在C语言中加法运算比乘法运算快。因此,我很好奇(a+b)*c的计算速度是否会比a*c+b*c快?
(a+b)*c
a*c+b*c
uyhoqukh1#
我刚刚了解到在C语言中加法运算比乘法运算快那是胡说。C语言本身并没有影响这一点。哪一个更快完全取决于CPU提供的指令集(伊萨)。因此,我很好奇(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; }
在x86_x64的gcc -O3 13.1上,我得到了两个版本100%等效的汇编代码:
gcc -O3
add1: lea eax, [rdi+rsi] imul eax, edx ret add2: lea eax, [rsi+rdi] imul eax, edx ret
enyaitl32#
唯一确定的方法是直接测量。您可以查看机器代码,但这并不一定能告诉您如何处理;您的系统可以并行执行操作。编写这两个版本,检测代码以收集统计数据(通过分析器或手动),然后运行数百万次计算。
2条答案
按热度按时间uyhoqukh1#
我刚刚了解到在C语言中加法运算比乘法运算快
那是胡说。C语言本身并没有影响这一点。哪一个更快完全取决于CPU提供的指令集(伊萨)。
因此,我很好奇
(a+b)*c
的计算速度是否会比a*c+b*c
快无论您用C代码编写哪个版本,优化编译器都很可能生成相同的机器码。试试这个代码:
在x86_x64的
gcc -O3
13.1上,我得到了两个版本100%等效的汇编代码:enyaitl32#
唯一确定的方法是直接测量。您可以查看机器代码,但这并不一定能告诉您如何处理;您的系统可以并行执行操作。
编写这两个版本,检测代码以收集统计数据(通过分析器或手动),然后运行数百万次计算。